在 Objective-C 中,我有以下声明:
id<Protocol1, Protocol2> myVar = (id<Protocol1, Protocol2>) [someObject getMyVar];
该语句将myVar
转换为两个不同的协议。如何在 Swift 中获得相同的结果?
答案 0 :(得分:6)
您可以使用协议组合的可选绑定:
if let myVar = someObject.getMyVar() as? protocol<Protocol1, Protocol2> {
// `myVar` has the type `protocol<Protocol1, Protocol2>`
// ...
} else {
// returned value does not conform to Protocol1 and Protocol2.
}
小型自足示例:
protocol P1 { }
protocol P2 { }
func test(obj : Any) {
if let p = obj as? protocol<P1, P2> {
print("yes")
} else {
print("no")
}
}
struct A { }
struct B : P1 { }
struct C : P2 { }
struct D : P1, P2 { }
test(A()) // no
test(B()) // no
test(C()) // no
test(D()) // yes