访问 Swift Class Public Objective-C Class Xcode 中的变量 9

Accessing Swift Class Public Variable in Objective-C Class Xcode 9

我正在尝试访问在 swift class 中声明的 Objective-C class 中的 Public 变量。但是我收到 "Unknown Method" 错误。这是我访问变量的代码:

NSLog(@"job on quick blox : %@",[QuickBloxJobClass jobOnQB]);

并显示编译错误:

No known class method for selector 'jobOnQB'

这是我在 QuickBloxJobClass 中的代码:

@objc public class QuickBloxJobClass: NSObject
{
    static var jobOnQB: QBCOCustomObject = QBCOCustomObject ()
}

我不能使它成为 public 变量,因为我在 QuickBloxJobClass 中有 Class 方法。我什至通过为 QuickBloxJobClass 创建一个变量来尝试它。但是该变量仍然无法访问。 它在 Xcode 中运行良好。

请给我一些解决方案。

我不确定为什么 jobOnQB 不能是 public,class 方法的存在不应影响它成为 public,但如果它不能 public 由于某些原因,可以在QuickBloxJobClass 中添加一个静态方法来获取变量。

顺便说一句,语法 [QuickBloxJobClass jobOnQB] 用于在 class QuickBloxJobClass 上调用静态方法 jobOnQB(尽管它有效)。然而,严格来说,由于 jobOnQB 是 属性,更好的 Objective-C 语法应该是 QuickBloxJobClass.jobOnQB.

另一个观察结果是 @objc 推论在 Swift 4 中被弃用,因此最好用 Swift 显式标记可从 Swift 调用的方法和属性 @objc。事实上,如果 Swift 3 @objc inference 设置为 Off.

,则必须这样做

更新:这需要进一步调查,可能只是一些设置的问题。如果我将 Swift 代码添加到最初设置为 Objective-C 的项目中,我会得到您描述的行为,但是可以在 Objective-C 中访问 Swift 中定义的内部成员,如果该项目最初是在 Swift 中设置的,后来添加了 Objective-C 文件。同样,如果 Swift 3 @objc 推理被禁用,您仍然必须用 @objc 标记此类成员。

更新 2:这个访问问题可以在最初在 Objective-C 中设置的项目中通过添加桥接头来解决。然后内部 Swift 成员在 Objective-C 中可见,即使桥接头的目的是相反的:使 Objective-C 内容在 Swift 中可见。