可以投吨至comform在迅速
协议我想使用SWIFT一般如下代码显示:可以投吨至comform在迅速
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
?
将类型作为参数传入是没有必要的,因为它可以从对象本身检索。该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.
在我的问题中,'handleOne'需要参数'.Type'。 –
这应该工作:'FUNC处理
您也可以使用T.self而不是type(of:data)。 –
编译器**不**足够聪明,知道'如果类型是B.Type'是TRUE;然后类型实际上是'B'型。由于'B'类型是'handleOne'函数的一个要求,所以这会失败! – Honey
我不这么认为,我在Xcode9 swift4中试过,使用'struct A:B {}','handle(data:Data(),with:A.self)'',如果type是B.Type'是'true',你可以试试这个 –