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

标签 ios objective-c swift variables xcode9

我正在尝试访问 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/

相关文章:

ios - UITextView 最后一行不显示

objective-c - objc_msgSend 和联合

ios - 我希望我的 View Controller 具有相同的自定义 UIView 组合,它们可以相互通信

ios - 如何通过 Swift 以编程方式重置蓝牙

ios - 为什么我的代码没有进入下一个 View

iOS:核心图像和多线程应用程序

ios - 如何确定在 SwiftUI 中弹出框是否显示为弹出框或工作表?

ios - swift 3 UITableView

iphone - 居中图像模糊

ios - 如何使用系统音量来播放声音?