我有一段代码:
exc_bad_instruction (code=exc_i386_invop subcode=0x0)
当代码运行时, 我收到一个错误:
(self as! ModuleOutput).output
在这一行:
{__longSum(${__time}, 900000)}
我的错误是什么?
答案 0 :(得分:0)
在这里完全同意Hamish和vadian。 ObjC强制转换和Swift as?
是完全不同的操作。在Swift中,您必须声明一致性。
(更多)正确的代码如下所示:
protocol ModuleOutput: class {
var output: Any { get }
}
class SomeClass: ModuleOutput {
var output: Any = "ervwe"
func getIt() {
let result = output
// ... use result
}
}
这仍然可能是错误的,因为output
几乎肯定不是Any
(这几乎从来都不是正确的类型),但它更接近。
我不太明白您的评论如下,但您似乎建议您有一个非正式地符合TranditionalViewWithOutput
的课程,但正式符合ObjC。曾经在ObjC中非常常见(在v2之前,当添加@optional
时),所以在旧代码中它不会令人惊讶。但这不是问题。顺从它:
extension InformallyConformingVC: TranditionalViewWithOutput {}
如果它已经在语法上符合,那只会告诉编译器它完全符合。 (Swift protocols are not just bags of syntax.)
我不清楚这是你的问题,但我能从评论中得到最好的结果。也许你应该更接近你的实际意图重新提出问题。