我有如下所述的目标c协议:
func search(by searchType: Enum1) {
}
我正在尝试使一个快速的类符合该协议。 Xcode为我生成的存根如下:
reloadRootPageControllers
但是Xcode在构建类仍然不符合协议时给出了错误。我在这里缺少什么?
答案 0 :(得分:1)
你是否有你的Objective-C标题包含swid标题中的协议和枚举以供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中编译,运行和打印“它的工作原理”。所以它可能是你的桥接标题,但要仔细检查你正在做的所有事情。