【问题标题】:Accessing Swift Class Public Variable in Objective-C Class Xcode 9在 Objective-C 类 Xcode 9 中访问 Swift 类公共变量
【发布时间】:2017-09-29 09:56:21
【问题描述】:

我正在尝试访问在 swift 类中声明的 Objective-C 类中的公共变量。但我收到“未知方法”错误。这是我访问变量的代码:

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

它显示编译错误:

选择器“jobOnQB”没有已知的类方法

这是我在 QuickBloxJobClass 中的代码:

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

我无法将其设为公共变量,因为我在 QuickBloxJobClass 中有类方法。甚至我也尝试过为QuickBloxJobClass 创建一个变量。但是该变量仍然无法访问。 它在 Xcode 中运行良好。

请给我一些解决方案。

【问题讨论】:

    标签: ios objective-c swift variables xcode9


    【解决方案1】:

    我不知道为什么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:这个访问问题可以在最初在 Objective-C 中设置的项目中通过添加一个桥接头来解决。然后内部 Swift 成员在 Objective-C 中变得可见,即使桥接头的目的是相反的:使 Objective-C 的东西在 Swift 中可见。

    【讨论】:

    • 我有另一个关于 iOS 11 的问题。我已经发布了一个问题 stackoverflow.com/questions/46468044/… ... 你能帮我解决这个问题吗?
    • 抱歉,Sushil,我不确定那里发生了什么,我不是 GUI 专家。 :( 但我确实有这个问题的更新,见上文。
    • 感谢您的回复。标记 Swift 变量 @objc 有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多