假设我有一个 Swift 类
@objcMembers class C: NSObject {
let range: ClosedRange<Int>
init(range: ClosedRange<Int>) {
self.range = range
super.init()
}
convenience init(min: Int, max: Int) {
self.init(range: min...max)
}
}
有没有办法让方便的init
只能在Objective-C中使用,这样API就会更小?
最佳答案
您可以将该方法公开给 Objective-C 运行时,同时将其设为私有(private)
。然而,这需要您自己引入私有(private)方法的接口(interface)(最好通过扩展自动生成的接口(interface),而不是引入单独的类声明)。你的 swift 类应该看起来像这样:
@objc(TDWSwiftObject)
class SwiftObject: NSObject {
let range: ClosedRange<Int>
init(range: ClosedRange<Int>) {
self.range = range
super.init()
}
@objc private convenience init(min: Int, max: Int) {
self.init(range: min...max)
}
}
然后将缺少的 Objective-C 部分添加为类类别:
@interface TDWSwiftObject (Private)
- (instancetype)initWithMin:(int)min max:(int)max;
@end
现在您的 Swift 代码将无法引用构造函数(因为它具有 private
访问修饰符),而 Objective-C 代码可以很好地使用它。
关于swift - Swift init 能否仅适用于 Objective C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76147011/