为什么我必须使用public来使用Swift 4 @objc推理来暴露func

时间:2018-02-02 18:58:35

标签: swift4

使用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

1 个答案:

答案 0 :(得分:1)

我认为这是两件不同的事情。

  

"使用private或fileprivate修饰符标记的Swift声明   没有出现在生成的标题中。

紧随其后

  

私有声明不会暴露给Objective-C,除非它们明确标有@IBAction,@ IBOutlet或@objc。

这可以理解为一个函数必须有明确的标记暴露到Objective-C,(单独)如果标记为私有它将不包括在内在标题中。

我不确定为什么某些东西需要在不可见的情况下暴露出来(我对运行时不够熟悉)。然而,与private最接近的Objective-C模拟不包含在标题中,因此使该行为匹配是有意义的。