我不熟悉Objective C.。
我使用私有框架,需要能够从我的Swift代码中更改其中一个属性。
该属性以Objective C声明:
@property (nonatomic, assign) BOOL *isSSNField;
在swift中我试图以这种方式改变属性的值:
myClass.isSSNField = true
我收到此错误
Cannot assign a value of type 'Bool' to a value of type 'UnsafeMutablePointer<ObjcBool>'
我不确定从哪里开始,或者为什么我发现此错误
答案 0 :(得分:17)
我从来没有见过你所描述的情况,而且我个人很想说情况不存在;在我的生活中,我从未见过Objective-C中的BOOL*
属性或ivar(而且我已经老了,相信我)。但是,如果你坚持:我没有对此进行测试,但我认为你可以这样说:
var ok = UnsafeMutablePointer<ObjCBool>.alloc(1)
ok[0] = false // or true
let val = ok
myClass.isSSNField = val
然而,虽然我认为编译,但我不清楚做的含义是什么。它可能导致宇宙坍缩成黑洞,所以要小心。
答案 1 :(得分:12)
更新Swift 3.1
对于指针类型,Swift提供pointee
属性,
Documentation表示它用于访问此指针引用的实例
您可以轻松设置指针字段
myClass.isSSNField.pointee = false
对于所有指针类型和转换,这都是相同的。如果要检查目标C BOOL*
的值,您可以轻松
if myClass.isSSNField.pointee.boolValue
答案 2 :(得分:3)
BOOL *是Bool的指针 在Swift中使用UnsafeMutablePointer。
var isSSNField: ObjCBool = true
myClass.isSSNField = &isSSNField
然后解决它。
就像函数中的isDirectory参数一样:
func fileExists(atPath path: String, isDirectory:UnsafeMutablePointer<ObjCBool>?) -> Bool
您可以使用以下代码:
var isDirectory:ObjCBool = true
var isFileExists = FileManager.default.fileExists(atPath: <#YourPath#>, isDirectory: &isDirectory)
答案 3 :(得分:3)
更安全的处理方法与@TanJunHao的答案非常相似:
var isSSNField = ObjCBool(true)
myClass.isSSNField = &isSSNField
答案 4 :(得分:0)
看起来您的Objective C属性声明不正确。请按如下所示进行更新,然后尝试
@property (nonatomic, assign)BOOL isSSNField;