swift - Swift 4 从“执行”函数调用中获取布尔结果
问题描述
我在 Swift 中有这样的函数:
@objc func doSomeStuff(_ args: [String]) -> Bool {
return true
}
我在 String 变量中有一个选择器名称来执行。这是我的初始值:
let sel = Selector("doSomeStuff:")
let args = ["123123", "qweqweqwe"]
问题是当我试图接收这样的函数计算结果时:
let returnedValue = perform(sel, with: args)
因为那个地方我不知道如何从returnedValue
变量中获取布尔值。我已经尝试过的事情:
- 传递
inout Bool
参数以在函数内部设置它 - 在函数中传递一个
UnsafeMutablePointer<Bool>
设置 - 要得到
returnedValue.takeRetainedValue()
以上都失败了。那么,我应该如何处理这种情况呢?
解决方案
当您使用 ObjC 运行时时,请考虑您正在处理对象。ObjC 签名是performSelector:with Object:
在 Swift 中你必须返回一个引用类型NSNumber
实例而不是值类型Bool
@objc func doSomeStuff(_ args: [String]) -> NSNumber {
return NSNumber(booleanLiteral: true)
}
你必须取消引用指针
let result = perform(sel, with: args)
let number = result!.takeUnretainedValue()
推荐阅读
- laravel - laravel 返回数字和布尔值作为字符串
- python - 用海龟图形绘制多边形
- android - 使用动态背景布局实现背景
- asp.net-core - Flutter web:如何将图像上传到 ASP .NET Core Web API?
- uml - 在应用程序开始时使用的节点部署的 UML 图上显示
- scrapy - 从索引页面有条件地抓取已抓取的项目
- docker - 如何从 docker 中的两个图像导入,其中两个图像共享相同的基础图像
- blazor - Blazor:从页面更新布局的问题
- meteor - Material-ui v5.0.6 和 Meteor 的性能问题
- ubuntu - 'truffle unpack' 从 WSL ubuntu 进入 windows 目录