访问 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 中可见。
我正在尝试访问在 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 中可见。