我有以下代码。如何解决最后一行中的错误?
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
。
请参阅Swift书中的“
检查协议一致性”部分。
注意
仅当您的协议标记有@objc属性时,才能检查协议一致性
问题内容: 考虑以下: 我一直在寻找背后的逻辑,但是没有运气。值得一提的是,如果将结构更改为类,则效果很好。 总是可以添加一种解决方法,并将fooArray的每个对象映射为强制类型,将它们转换为Any类型,但这不是这里的问题。我正在寻找一种解释,为什么会这样。 有人可以解释一下吗? 问题答案: Swift 3更新 从Swift 3(特别是Xcode 8 beta 6附带的内部版本)开始,集合类型现
问题内容: 如何将java.util.Map [String,Object]转换为scala.collection.immutable.Map [String,Any],以便将原始映射中的所有值(整数,布尔值等)都转换为正确的值,以在Scala中运作良好。 问题答案: 正如VonC所说,仅支持可变集合,但您不必使用单独的库。派生可变集合,从该集合定义了一个返回不可变Map的方法: 这将输出
问题内容: 如果P是类而不是协议,则代码可以正常工作。类和协议之间有什么区别?它们都被实现为堆中的指针,不是吗?上面的代码可以成功编译,但是在运行时崩溃。这个EXC_BAD_ACCESS错误是什么意思? 感谢@Antonio,但我仍然不了解此示例代码的工作方式。 AnyObject是特例吗? 参考:https : //developer.apple.com/library/content/docu
问题内容: 仅供参考:在此处引发的Swift错误:https : //bugs.swift.org/browse/SR-3871 我遇到一个奇怪的问题,即强制转换不起作用,但控制台将其显示为正确的类型。 我有公开协议 然后,我使用一个返回实例的公共方法在一个模块中实现此功能。 然后,在我的视图控制器中,我以该对象作为发送者触发segue 到目前为止一切都很好。 问题出在我的方法上。 但是,将实例强
问题内容: 在Java中: 抛出。为什么?为什么在这里投降?我不知道原因。 问题答案: 让我重命名您的班级,以使事情更加清楚。 -> 。 -> 。 仅仅因为你是一个人并不意味着你是一个人。你可能是一个。这就是将A强制转换为A的原因。 另一方面,每个是吗?答案是“是”。这就是为什么您 可以 编写如下代码: 要么 另外值得注意的是,您 可以 执行以下操作: 这样做的原因是您的变量实际上是在引用实例。因