转换非托管<AnyObject>!在斯威夫特的Bool

Udi*_*itS 6 ios swift

我试图获得一个现有Objective C类的方法的结果,使用performSelector调用

let result = controlDelegate.performSelector("methodThatReturnsBOOL") as? Bool
Run Code Online (Sandbox Code Playgroud)

我需要将此结果转换为Bool类型的Swift.

上面提到的代码给出了警告

"从'未经管理!'演员阵容 不相关的类型'Bool'总是失败"

并且结果总是"假",即使该方法返回YES.

有关将结果转换为Bool的建议吗?

methodThatReturnsBOOL的签名

- (BOOL)methodThatReturnsBOOL
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

Udi*_*itS 9

已经有很长一段时间了,因为这仍然没有答案,所以我正在添加我在学习过程中学到的东西.

要转换BOOLObjective C方法返回的值,您只需使用,

if let result = controlDelegate.performSelector("methodThatReturnsBOOL") {
    print("true")
} else {
    print("false")
}
Run Code Online (Sandbox Code Playgroud)

Bool如果需要,您还可以在此处将值true/false分配给Swift .

注意:我尝试Unmanaged<AnyObject>直接Bool使用takeRetainedValue()SO上的许多答案建议使用,但这似乎在这种情况下不起作用.