我有如下目标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”都很好。所以这可能是你的桥头球,但要仔细检查你做的每件事。