0

这两个功能之间的功能有什么实际区别吗?

func testX<T>(value:T) where T:StringProtocol {
    // Do something
}

func testY<T:StringProtocol>(value:T){
    // Do something
}

它们似乎都可以正常编译和运行。想知道为什么有两种不同但看似相同的语法。

4

1 回答 1

1

没有区别。第一种形式

func testX<T>(value: T) where T: StringProtocol

SE-0081 一起引入 将 where 子句移至声明末尾以增加可读性,特别是对于较长的约束列表。理由是where从通用参数列表中删除子句,例如

func foo<S: Sequence where S.Element == Int>(seq: S)

变成了

func foo<S: Sequence>(seq: S) where S.Element == Int

在 Swift 3 中。作为副作用,即使是像 your 这样的简单约束T: StringProtocol也可以移动到新引入的 where 子句。

于 2018-04-06T20:37:21.097 回答