一尘不染

从Any向下转换为协议

swift

我有以下代码。如何解决最后一行中的错误?

protocol Animal {
    func walk()
}

struct Cat: Animal {
    func walk() {}

    init() { }
}

var obj: Any = Cat()
var cat = obj as Animal // ERROR: cannot downcast from Any to unrelated type Animal

阅读 308

收藏
2020-07-07

共1个答案

一尘不染

更新: 此问题已在Swift 1.2+(Xcode 6.3+)中修复。Xcode 6.3 beta发行说明说:

现在,只要没有关联类型,动态类型转换(“ as!”,“ as?”和“ is”)就可以使用Swift协议类型。


只能检查协议一致性(其包括isas,和as?用) @objc 协议Animal不是@objc

请参阅Swift书中的“
检查协议一致性”部分。

注意

仅当您的协议标记有@objc属性时,才能检查协议一致性

2020-07-07