如何定义一个关系,指定T
支持我的通用约束中的Int
下标,以便编译该函数?
func index<T,U>(x:T) -> U {
return x[0] //Invalid capability as expected
}
我的第一个猜测类似T[Int] == U
,我可以指定T
可以使用Int
编入索引并返回U
,即:
func index<T,U where T[Int] == U>(x:T) -> U {
return x[0]
}
但这种语法不起作用。无论如何,我可以将这种关系指定为通用约束或协议吗?
答案 0 :(得分:9)
您可以使用实现下标功能的协议。例如:
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]
}