我已经编写了一些函数(Swift 2.1,XCode 7.1.1):
public func test1<T:UIView>(type: T.Type) -> T { print(type.dynamicType) return type.init() } public func test2<T:UIView>(type: T.Type)(_ n: Int) -> T { print(type.dynamicType) return type.init() } public func test3<T1:UIView, T2:UIView>(type1: T1.Type, _ type2: T2.Type) { print(type1.init()) print(type2.init()) } public func test4<T:UIView>(type: T.Type, _ n: Int) { print(type.init()) print(n) } public func test5<T:UIView>(n: Int,_ type: T.Type) { print(type.init()) print(n) }
并致电给他们:
test1(UIButton) test1(UIButton.self) test2(UIButton)(1) test2(UIButton.self)(1) test3(UIButton.self, UITextField.self) test4(UIButton.self, 1) test5(1, UIButton.self)
如您所见,当类型是唯一参数时,它可以省略“ .self”。但是对于所有不仅具有类型参数的函数,它们都需要“ .self”。
我想知道:
巧合的是,这只是迅速发展而已。.self在Type是唯一的参数时,该功能被忽略,这在Swift中已报告为错误。
.self
苹果相关报价:
这是一个错误。.self应该到处都需要。不幸的是,我们已经有一段时间了该错误,所以我不确定通过更改它会破坏多少代码。如果我们想删除该要求,那将被视为一种语言更改,并且必须经过Swift Evolution流程。