我正在尝试访问 swift 类中声明的 Objective-C 类中的 Public 变量。但我收到“未知方法”错误。这是我访问变量的代码:
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
中有类方法。甚至我也尝试过为 QuickBloxJobClass 创建变量。但该变量仍然无法访问。
它在 Xcode 中运行良好。
请给我一些解决方案。
最佳答案
我不确定为什么jobOnQB
不能公开,class
方法的存在不应干扰它的公开,但如果它由于某种原因不能公开,您可以向 QuickBloxJobClass 添加静态方法来获取变量。
顺便说一句,语法[QuickBloxJobClass jobOnQB]
用于调用类QuickBloxJobClass
上的静态方法jobOnQB
(不过它可以工作)。但严格来说,由于 jobOnQB
是一个属性,因此更好的 Objective-C 语法是 QuickBloxJobClass.jobOnQB
。
另一个观察结果是,@objc
推理在 Swift 4 中已被弃用,因此最好使用 @objc
显式标记可从 Swift 调用的 Swift 方法和属性。事实上,如果 Swift 3 @objc inference
设置为 Off
,您就必须执行此操作。
更新:这需要进一步调查,可能只是某些设置的问题。如果我将 Swift 代码添加到最初设置为 Objective-C 的项目中,我会得到您所描述的行为,但是如果该项目最初是在 Swift 中使用 Objective-C 设置的,则可以在 Objective-C 中很好地访问 Swift 中定义的内部成员稍后添加的文件。同样,如果 Swift 3 @objc 推理被禁用,您仍然需要使用 @objc
标记此类成员。
更新 2:可以通过添加桥接 header 在最初使用 Objective-C 设置的项目中解决此访问问题。然后,内部 Swift 成员在 Objective-C 中变得可见,尽管桥接 header 的目的是相反的:使 Objective-C 内容在 Swift 中可见。
关于ios - 在 Objective-C 类 Xcode 9 中访问 Swift 类公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486360/