我有两个class
,它们都符合相同的protocol
:
class A {}
class B {}
protocol P {}
extension A: P {}
extension B: P {}
此外,我有一个回调闭包,其主要参数是传递给某些C API函数的UnsafeMutableRawPointer
:
SomeCFunction(…, …, { (pointerToEitherAOrB: UnsafeMutableRawPointer) in
// Cast pointerToEitherAOrB to either A or B.
})
我不知道指针所指的是两个class
中的哪个。仍然可以将此指针转换为正确的类型吗?
我的直觉告诉我这是不可能的,我将需要使用super
class
。
答案 0 :(得分:4)
使用通用的超类将是更清洁的方法,但是首先转换为AnyObject
似乎也可以:
let aOrB = Unmanaged<AnyObject>.fromOpaque(pointerToEitherAOrB).takeUnretainedValue()
switch aOrB {
case let a as A:
print(a)
case let b as B:
print(b)
default:
print("Something else")
}