一尘不染

swift类作为不带.self的参数

swift

我已经编写了一些函数(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”。

我想知道:

  1. 这是为什么?
  2. 以及如何在使用它的地方声明一个不需要“ .self”的具有多个参数的函数?

阅读 300

收藏
2020-07-07

共1个答案

一尘不染

巧合的是,这只是迅速发展而已。.self在Type是唯一的参数时,该功能被忽略,这在Swift中已报告为错误

苹果相关报价:

这是一个错误。.self应该到处都需要。不幸的是,我们已经有一段时间了该错误,所以我不确定通过更改它会破坏多少代码。如果我们想删除该要求,那将被视为一种语言更改,并且必须经过Swift
Evolution流程。

2020-07-07