假设我在 Swift 中有一个方便的初始化器:
extension UIImage {
convenience init?(bundleNamed name: String) {
let bundle = NSBundle(forClass: Foo.self)
self.init(named: name, inBundle: bundle, compatibleWithTraitCollection: nil)
}
}
在 Objective-C 中我该如何称呼它?以下不起作用:
[UIImage bundleNamed:@"Bar"];
[[UIImage alloc] initWithBundleNamed:@"Bar"];
我是否需要专门针对 Objective-C 的额外类扩展?
Solution:根据下面 Lasse 的回答,我必须执行的步骤是:
在 Objective-C 类实现文件中,添加
#import <ModuleName-Swift.h>
然后我必须删除派生数据并重建。然后我就可以使用方便的初始化程序,如下所示:
[[UIImage alloc] initWithBundleNamed: @"Bar"];
我不需要将初始化程序声明为public
因为默认级别为internal
对于我的模块来说已经足够了。
查看将 Swift 与 Cocoa 和 Objective-C 结合使用 (Swift 2.2) - 混合搭配 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-ID122。归根结底似乎是
- 制作方便的初始化程序
public
, and
- 导入 XCode 生成的头文件
[YourProductModuleName]-Swift.h
到你的代码中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)