Swift类不符合Objective C Protocol

时间:2018-03-20 02:48:24

标签: objective-c swift protocols

我有如下所述的目标c协议:

func search(by searchType: Enum1) {
}

我正在尝试使一个快速的类符合该协议。 Xcode为我生成的存根如下:

reloadRootPageControllers

但是Xcode在构建类仍然不符合协议时给出了错误。我在这里缺少什么?

1 个答案:

答案 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中编译,运行和打印“它的工作原理”。所以它可能是你的桥接标题,但要仔细检查你正在做的所有事情。