我想使用swift泛型代码如下所示:
func handle<T>(data: Data, with type: T.Type) {
if type is B.Type {
handleOne(data: data, with: type) //error here: In argument type 'T.Type', 'T' does not conform to expected type 'B'
// cast T comform B?
} else {
handleTwo(data: data)
}
}
func handleOne<T>(data: Data, with type: T.Type) where T:B {
}
func handleTwo(data: Data) {
}
...
protocol B {
...
}
B
是一个协议,我可以在handleOne
中致电handle
吗?可以投射T
投放B
吗?
答案 0 :(得分:2)
没有必要将类型作为参数传递,因为它可以从对象本身检索。 is
类型检查运算符处理对象的实例并检查类型名称:
protocol A {}
protocol Data {}
func handle (data: Data) {
if data is A {
print("Handled A.")
} else {
print("Handled something else.")
}
}
struct AStruct: Data, A {}
handle(data: AStruct()) // Handled A.