使用Swift 4,我有一个简单的类,我希望暴露给Objective-C,如下所示:
@objc class SomeClass : NSObject {
@objc class func foo(someDate : Date) -> Bool {
return true
}
}
编译后,自动生成的Obj-C桥接头不包含该类。但是,如果我在类和func之前添加public修饰符并重建它将在桥接头中。这似乎与陈述(强调我的)from Apple's doc的陈述相矛盾:
私人声明不会暴露于Objective-C ,除非 使用@IBAction,@ IBOutlet或 @objc 明确标记
为什么我需要添加公共修饰符? Even the Swift docs显示关闭“公开”的示例,只使用@objc公开给Objective-C
答案 0 :(得分:1)
我认为这是两件不同的事情。
"使用private或fileprivate修饰符标记的Swift声明 没有出现在生成的标题中。
紧随其后
私有声明不会暴露给Objective-C,除非它们明确标有@IBAction,@ IBOutlet或@objc。
这可以理解为一个函数必须有明确的标记暴露到Objective-C,和(单独)如果标记为私有它将不包括在内在标题中。
我不确定为什么某些东西需要在不可见的情况下暴露出来(我对运行时不够熟悉)。然而,与private
最接近的Objective-C模拟不包含在标题中,因此使该行为匹配是有意义的。