Swift中两种不同协议的转换

Swift中两种不同协议的转换,swift,Swift,在Objective-C中,我有以下陈述: id<Protocol1, Protocol2> myVar = (id<Protocol1, Protocol2>) [someObject getMyVar]; id myVar=(id)[someObject getMyVar]; 这句话将myVar转换成两种不同的协议。如何在Swift中获得相同的结果?您可以使用协议组合的可选绑定: if let myVar = someObject.getMyVar() as? p

在Objective-C中,我有以下陈述:

id<Protocol1, Protocol2> myVar = (id<Protocol1, Protocol2>) [someObject getMyVar];
id myVar=(id)[someObject getMyVar];

这句话将myVar转换成两种不同的协议。如何在Swift中获得相同的结果?

您可以使用协议组合的可选绑定:

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.
}
如果让myVar=someObject.getMyVar()作为?协议{
//`myVar`具有`protocol'类型`
// ...
}否则{
//返回的值不符合Protocol1和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
协议P1{}
协议P2{}
func测试(目标:任何){
如果设p=obj as?协议{
打印(“是”)
}否则{
打印(“否”)
}
}
结构A{}
结构B:P1{}
结构C:P2{}
结构D:P1,P2{}
test(A())//否
test(B())//否
test(C())//否
test(D())//是

您可以对协议组合使用可选绑定:

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.
}
如果让myVar=someObject.getMyVar()作为?协议{
//`myVar`具有`protocol'类型`
// ...
}否则{
//返回的值不符合Protocol1和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
协议P1{}
协议P2{}
func测试(目标:任何){
如果设p=obj as?协议{
打印(“是”)
}否则{
打印(“否”)
}
}
结构A{}
结构B:P1{}
结构C:P2{}
结构D:P1,P2{}
test(A())//否
test(B())//否
test(C())//否
test(D())//是