swift - 在变量中存储对类或函数的引用
问题描述
我想存储对这样的类的引用:
var foo = Int
let converted = foo("123")
但是,这似乎不起作用。
它会让我这样做:
var foo = type(of: Int())
let converted = foo.init("123")!
print(foo)
>>> Int
区别在哪里?
解决方案
Int
是一个类型,而不是一个函数。
当你打电话时Int("123")
,那只是 的简写Int.init("123")
。
您想存储Int.init
as foo
,但是Int
您想要许多初始化程序中的哪一个?Swift 不知道,所以你必须告诉它你想要将 a 转换String
为 an的函数Int?
:
var foo: (String) -> Int? = Int.init
let converted = foo("123")
指定相同 this 的另一种方法是:
var foo = Int.init as (String) -> Int?
但我更喜欢第一个,因为它明确设置了foo
.
如果要将类型存储Int
到foo
,请执行以下操作:
var foo = Int.self
let converted = foo.init("123")!
print(converted) // 123
推荐阅读
- haskell - keter 上的 Yesod 应用程序具有对 DB 的只读访问权限
- amazon-web-services - 允许用户启用存储桶以进行静态网站托管的 s3 权限是什么?
- kubernetes - 如何让一个 Kubernetes 服务与其他 Kubernetes 服务通信?
- python - 加载模型时的预测速度比在过程中拟合时的速度慢
- javascript - 在 JavaScript 中过滤对象中的数据
- jquery - 在后端使用后无法从前端访问asp按钮
- python - python中具有相同值的不同键
- java - 如何在可以运行直到用户停止的服务中创建 FusedLocationProviderClient?
- javascript - shouldComponentUpdate 和内置 diffing 的区别
- android - 获取 .apk Android 应用程序安装错误的最简单方法是什么?