Swift 4 从 "perform" 函数调用中获取 Bool 结果
Swift 4 get Bool result from "perform" function call
我在 Swift:
中有这样的函数
@objc func doSomeStuff(_ args: [String]) -> Bool {
return true
}
而且我在要执行的字符串变量中有一个选择器名称。这是我的初始值:
let sel = Selector("doSomeStuff:")
let args = ["123123", "qweqweqwe"]
问题是当我尝试接收这样的函数计算结果时:
let returnedValue = perform(sel, with: args)
从那个地方开始,我不知道如何从 returnedValue
变量中获取布尔值。我已经尝试过的事情:
- 传递一个
inout Bool
参数在函数内部设置它
- 传递
UnsafeMutablePointer<Bool>
以在函数 中设置
- 获得
returnedValue.takeRetainedValue()
以上都失败了。那么,我应该如何处理这种情况?
当您使用 ObjC 运行时时,请考虑您正在处理 对象。 ObjC 签名是 performSelector:withObject:
在 Swift 中你必须 return 引用类型 NSNumber
实例而不是值类型 Bool
@objc func doSomeStuff(_ args: [String]) -> NSNumber {
return NSNumber(booleanLiteral: true)
}
并且您必须取消引用指针
let result = perform(sel, with: args)
let number = result!.takeUnretainedValue()
我在 Swift:
中有这样的函数@objc func doSomeStuff(_ args: [String]) -> Bool {
return true
}
而且我在要执行的字符串变量中有一个选择器名称。这是我的初始值:
let sel = Selector("doSomeStuff:")
let args = ["123123", "qweqweqwe"]
问题是当我尝试接收这样的函数计算结果时:
let returnedValue = perform(sel, with: args)
从那个地方开始,我不知道如何从 returnedValue
变量中获取布尔值。我已经尝试过的事情:
- 传递一个
inout Bool
参数在函数内部设置它 - 传递
UnsafeMutablePointer<Bool>
以在函数 中设置
- 获得
returnedValue.takeRetainedValue()
以上都失败了。那么,我应该如何处理这种情况?
当您使用 ObjC 运行时时,请考虑您正在处理 对象。 ObjC 签名是 performSelector:withObject:
在 Swift 中你必须 return 引用类型 NSNumber
实例而不是值类型 Bool
@objc func doSomeStuff(_ args: [String]) -> NSNumber {
return NSNumber(booleanLiteral: true)
}
并且您必须取消引用指针
let result = perform(sel, with: args)
let number = result!.takeUnretainedValue()