使用Objective C中的Swift初始化程序,使用符合协议的无类型参数

时间:2014-09-15 23:27:24

标签: ios objective-c swift

我遇到问题,Xcode 6会自动将我在swift中创建的对象的初始化程序桥接到Objective-C。问题似乎是我没有将初始化程序的参数定义为具有任何特定类,而是通过遵循特定协议来定义它。自定义初始值设定项编写如下:

public init(delegate: <PROTOCOL_NAME>) {
    self.delegate = delegate
    super.init()
}

当我编写这样的init方法时,我没有在Objective-C文件中接受我尝试使用它(即它被标记为错误,不是&t; t提出自动填充建议)。我确保我引用的协议标有@objc,因此我可以在Objective-C文件中使用它。

当我使用单个参数delegate创建一个只有NSObject的init方法时,Objective-C文件立即接受对[[OBJECT_NAME alloc] initWithDelegate:(NSObject)]的调用,所以我知道Swift和Obj-C之间的桥接在我的项目中起作用。

我目前正在使用一种解决方法,我只是调用基本的init()方法并在之后设置委托,但我真的想知道是否可以通过协议获得便利初始化程序 - 符合在Objective-C中工作的delegate参数。

1 个答案:

答案 0 :(得分:0)

好的,在开始写这个问题后不久,我找到了解决这个问题的方法。看起来从Swift文件到Objective-C的各种东西都是有限的(尽管我确定不确定)。为了解决这个特殊问题,我将上述协议作为Swift中的NSObjectProtocol。完成后,正确的init方法自动移植到Objective-C。

使协议符合NSObjectProtocol的代码如下所示:

@objc public protocol <PROTOCOL_NAME>: NSObjectProtocol {
    /* Code and stuff */
}

如果其他人对Swift-ObjC桥接有什么了解,请发表评论,因为我想了解更多。