首页 > 解决方案 > 在变量中存储对类或函数的引用

问题描述

我想存储对这样的类的引用:

var foo = Int
let converted = foo("123")

但是,这似乎不起作用。

它会让我这样做:

var foo = type(of: Int())
let converted = foo.init("123")!
print(foo)
>>> Int

区别在哪里?

标签: swift

解决方案


Int是一个类型,而不是一个函数。

当你打电话时Int("123"),那只是 的简写Int.init("123")

您想存储Int.initas 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.


如果要将类型存储Intfoo,请执行以下操作:

var foo = Int.self

let converted = foo.init("123")!

print(converted)  // 123

推荐阅读