如何定义一个指定T支持Int我的泛型约束中的下标的关系,以便这个函数编译?
func index<T,U>(x:T) -> U {
return x[0] //Invalid capability as expected
}
Run Code Online (Sandbox Code Playgroud)
我的第一个猜测是T[Int] == U我可以指定的地方可以使用和T索引进行索引,即:IntU
func index<T,U where T[Int] == U>(x:T) -> U {
return x[0]
}
Run Code Online (Sandbox Code Playgroud)
但这种语法不起作用.无论如何我可以将这种关系指定为通用约束或协议吗?
您可以使用实现下标功能的协议.例如:
protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}
func index<T:Container, U where U == T.ItemType>(x:T) -> U {
return x[0]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |