我有以下代码。如何解决最后一行中的错误?
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
更新: 此问题已在Swift 1.2+(Xcode 6.3+)中修复。Xcode 6.3 beta发行说明说:
现在,只要没有关联类型,动态类型转换(“ as!”,“ as?”和“ is”)就可以使用Swift协议类型。
只能检查协议一致性(其包括is,as,和as?用) @objc 协议。Animal不是@objc。
is
as
as?
@objc
Animal
请参阅Swift书中的“ 检查协议一致性”部分。
注意 仅当您的协议标记有@objc属性时,才能检查协议一致性
注意
仅当您的协议标记有@objc属性时,才能检查协议一致性