当需要在Swift中进行某种类型转换时,我注意到该语言有两种不同的语法形式。我能够写下这个:
arr as [Any]
但也是这样:
[Any](arr)
这些有什么区别?通常,对于任何值v
和类型T
,我都可以写下所有这些:
Expression Has type Behavior
========== ======== ==============================================
v as T T Compile error if v cannot have type T
v as? T T? Evaluates to nil if v does not have type T
v as! T T Runtime error if v does not have type T
T(v) T ???
问题:语法形式T(v)
的名称是什么?它的语义是什么?
答案 0 :(得分:2)
语法T(v)
不是一种类型转换形式 - 它的 initialisation 。说T(v)
会通过调用带有T
参数的T
init(_:)
来创建v
的新实例。
对于[Any](arr)
,这只是Array<Any>.init(arr)
的语法糖 - 这是Array
init(_:)
初始化程序,接受Sequence
与Array
&#39; s Element
类型相同的静态类型的元素(在本例中为Any
)。它将简单地创建一个包含该序列元素的新数组。