假设我在Swift中有一个方便的初始化程序:
extension UIImage {
convenience init?(bundleNamed name: String) {
let bundle = NSBundle(forClass: Foo.self)
self.init(named: name, inBundle: bundle, compatibleWithTraitCollection: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在Objective-C中调用它?以下不起作用:
[UIImage bundleNamed:@"Bar"];
[[UIImage alloc] initWithBundleNamed:@"Bar"];
Run Code Online (Sandbox Code Playgroud)
我是否只需要为Objective-C提供额外的类扩展?
解决方案:按照Lasse的回答,我必须做的步骤是:
在Objective-C类实现文件中,添加
#import <ModuleName-Swift.h>
Run Code Online (Sandbox Code Playgroud)
然后我不得不删除派生数据并重建.然后我能够使用便利初始化程序如下:
[[UIImage alloc] initWithBundleNamed: @"Bar"];
Run Code Online (Sandbox Code Playgroud)
我不需要声明初始化程序,public因为默认级别internal足以支持我的模块.
查看使用Swift与Cocoa和Objective-C(Swift 2.2) - 混合和匹配.它似乎归结为
public,以及[YourProductModuleName]-Swift.h导入代码中| 归档时间: |
|
| 查看次数: |
2420 次 |
| 最近记录: |