Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 访问Objective-C类Xcode 9中的Swift类公共变量_Ios_Objective C_Swift_Variables_Xcode9 - Fatal编程技术网

Ios 访问Objective-C类Xcode 9中的Swift类公共变量

Ios 访问Objective-C类Xcode 9中的Swift类公共变量,ios,objective-c,swift,variables,xcode9,Ios,Objective C,Swift,Variables,Xcode9,我试图访问swift类中声明的Objective-C类中的公共变量。但我得到了“未知方法”错误。以下是我访问变量的代码: NSLog(@"job on quick blox : %@",[QuickBloxJobClass jobOnQB]); 并显示编译错误: 选择器“jobOnQB”没有已知的类方法 下面是我在QuickBloxJobClass中的代码: @objc public class QuickBloxJobClass: NSObject { static var jobO

我试图访问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中工作得很好


请给我建议一些解决方案。

我不确定为什么
jobOnQB
不能公开,存在
class
方法不应该影响它的公开性,但是如果它由于某种原因不能公开,您可以向
QuickBloxJobClass
添加一个静态方法来获取变量

顺便说一句,语法
[QuickBloxJobClass jobOnQB]
用于调用类
QuickBloxJobClass
上的静态方法
jobOnQB
(但它可以工作)。但是,严格来说,由于
jobOnQB
是一个属性,因此更好的Objective-C语法应该是
QuickBloxJobClass.jobOnQB

另一个观察结果是,
@objc
推理在Swift 4中被弃用,因此最好使用
@objc
显式标记可从Swift调用的Swift方法和属性。事实上,如果
Swift 3@objc interference
设置为
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的问题。我发布了一个问题。。。你能帮我吗?对不起,苏西,我不知道那里发生了什么,我不是一个GUI专家(但我对这个问题有一个更新,见上文。感谢您的回答。将Swift variables@objc标记为有效。