我遇到问题,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
参数。
答案 0 :(得分:0)
好的,在开始写这个问题后不久,我找到了解决这个问题的方法。看起来从Swift文件到Objective-C的各种东西都是有限的(尽管我确定不确定)。为了解决这个特殊问题,我将上述协议作为Swift中的NSObjectProtocol
。完成后,正确的init方法自动移植到Objective-C。
使协议符合NSObjectProtocol
的代码如下所示:
@objc public protocol <PROTOCOL_NAME>: NSObjectProtocol {
/* Code and stuff */
}
如果其他人对Swift-ObjC桥接有什么了解,请发表评论,因为我想了解更多。