这两个功能之间的功能有什么实际区别吗?
func testX<T>(value:T) where T:StringProtocol {
// Do something
}
func testY<T:StringProtocol>(value:T){
// Do something
}
它们似乎都可以正常编译和运行。想知道为什么有两种不同但看似相同的语法。
这两个功能之间的功能有什么实际区别吗?
func testX<T>(value:T) where T:StringProtocol {
// Do something
}
func testY<T:StringProtocol>(value:T){
// Do something
}
它们似乎都可以正常编译和运行。想知道为什么有两种不同但看似相同的语法。
没有区别。第一种形式
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 子句。