我制定了一个协议:
protocol TestProtocol {
func test() -> Int
}
我扩展了Int和Optional以符合协议:
extension Int: TestProtocol {
func test() -> Int {
return 1
}
}
extension Optional where Wrapped: TestProtocol {
func test() -> Int {
switch self {
case let value?:
return value.test()
default:
return 0
}
}
}
我也可以扩展String,Double和其他类型符合此协议。
如果我给出特定类型的变量,它可以正常工作:
let fff: Int? = 2
print(fff.test())
但如果变量类型是any:
let kkk: Any = fff
print(kkk.test())
如何检查kkk的真实类型符合协议TestProtocol并获得结果。
答案 0 :(得分:1)
使用可选绑定:
let kkk: Any = 42 // Actually an Int
if let k = kkk as? TestProtocol {
print(k.test())
} else {
print("kkk does not conform to TestProtocol")
}