我有如下目标c协议:

@protocol Class1<NSObject>

- (void)searchBy:(Enum1)searchType;

@end

我正试图使swift类符合该协议。Xcode为我生成的存根如下:
func search(by searchType: Enum1) {
}

但是Xcode在构建类仍然不符合协议时给了我一个错误。我错过了什么?

最佳答案

您的Objective-C报头是否包含桥接报头中的协议和枚举以便swift查找?
所以我创建了一个新的测试应用程序,视图控制器如下所示:

import UIKit

class ViewController: UIViewController, Class1
{
    func search(by searchType: Enum1) {
        print("it works")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let class1 = self as Class1
        class1.search(by: Enum1.PlayerStateOff)
    }
}

我的objective-C桥接头看起来是这样的:
//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "Foo.h"

ObjectiveC头Foo.h如下所示:
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSInteger, Enum1) {
    PlayerStateOff,
    PlayerStatePlaying,
    PlayerStatePaused
};

@protocol Class1<NSObject>

- (void)searchBy:(Enum1)searchType;

@end

@interface Foo : NSObject

@end

它在Xcode 9.2中编译、运行和打印“it works”都很好。所以这可能是你的桥头球,但要仔细检查你做的每件事。

10-08 10:48