gpt4 book ai didi

ios - 在 Objective-C 类 Xcode 9 中访问 Swift 类公共(public)变量

转载 作者:可可西里 更新时间:2023-11-01 02:00:48 24 4
gpt4 key购买 nike

我正在尝试访问在 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 设置的,那么在 Swift 中定义的内部成员可以在 Objective-C 中正常访问稍后添加的文件。同样,如果禁用了 Swift 3 @objc 推断,您仍然必须使用 @objc 标记此类成员。

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

关于ios - 在 Objective-C 类 Xcode 9 中访问 Swift 类公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com