Generics Swift要求两个泛型为同一类型
在Swift编程语言中,我看到了一个示例Generics Swift要求两个泛型为同一类型,generics,swift,Generics,Swift,在Swift编程语言中,我看到了一个示例 func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool { for lhsItem in lhs { for rhsItem
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
但不是
anyCommonElements("123", [1, 2])
但是T:Sequence,U:Sequence
意味着参数T和U必须是序列,例如字符串或数组
使用where子句编写具有两个参数T和U的函数的正确方法是什么?省略
T:Sequence,U:Sequence
需求会导致错误“GeneratorType不是类型T的成员”如果您希望两个参数都是相同的类型,您可以对它们使用相同的泛型。比如:
func functionName <T, T> (lhs: T, rhs: T) -> Bool {
return false
}
func函数名(左:T,右:T)->Bool{
返回错误
}
正如@conner所指出的,但您永远不会以这种方式指定它,因为只有一种类型。这样更好:
func functionName<T> (lhs: T, rhs: T) -> Bool { ... }
func函数名(lhs:T,rhs:T)->Bool{…}
哦,我想得太多了
func functionName<T> (lhs: T, rhs: T) -> Bool { ... }