向下转换为swift中更具体的类型

时间:2016-09-28 15:50:02

标签: ios swift

我制定了一个协议:

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并获得结果。

1 个答案:

答案 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")
}