Swift 在变量中存储对类或函数的引用

Swift 在变量中存储对类或函数的引用,swift,Swift,我想存储对如下类的引用: var foo = Int let converted = foo("123") 然而,这似乎不起作用 但它会让我做到这一点: var foo = type(of: Int()) let converted = foo.init("123")! print(foo) >>> Int 区别在哪里?与: var foo = Int 您正在尝试分配值/引用。但你不能为一种类型做这件事 相反,您可以使用: type

我想存储对如下类的引用:

var foo = Int
let converted = foo("123")
然而,这似乎不起作用

但它会让我做到这一点:

var foo = type(of: Int())
let converted = foo.init("123")!
print(foo)
>>> Int
区别在哪里?

与:

var foo = Int
您正在尝试分配值/引用。但你不能为一种类型做这件事

相反,您可以使用:

typealias foo = Int
以下措施将起作用:

let converted = foo("123")
分配函数的代码看起来不错(假设您没有重新声明foo):

func-bar(){
打印(“你好”)
}
var foo=bar

foo()//
Int
是一种类型,而不是函数

当您调用
Int(“123”)
时,这只是
Int.init(“123”)
的缩写

您想将
Int.init
存储为
foo
,但是您想要
Int
的许多初始值设定项中的哪一个?Swift不知道,所以您必须告诉它您需要将
字符串
转换为
Int?
的函数:

var foo: (String) -> Int? = Int.init
let converted = foo("123")
另一种指定相同参数的方法是:

var foo = Int.init as (String) -> Int?
但是我更喜欢第一个,因为它显式地设置了
foo
的类型


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

var foo = Int.self

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

print(converted)  // 123

谢谢你的回复!typealias在我的情况下不起作用,因为它是不可变的。我希望以后能够在代码中更改变量的值,即从Int改为Double。功能分配确实有效。我试的时候一定是弄错了。我将编辑我的问题。这很有意义。它需要知道参数的类型和返回类型,以确定使用哪个init。谢谢你的解释!我尝试过这样做:
foo=Double.init as(Double)->Double
但它给了我一个错误:表达式类型“()”在没有更多上下文的情况下是不明确的。我还需要做些什么来使它更显式吗?变量的类型无法更改。如果已确定
foo
(字符串)->Int?
则不能为其分配
(双精度)->Double
var foo = Int.self

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

print(converted)  // 123