从swift类转换为协议时出错

时间:2017-01-22 16:22:37

标签: ios swift

我有一段代码:

exc_bad_instruction (code=exc_i386_invop subcode=0x0) 

当代码运行时, 我收到一个错误:

(self as! ModuleOutput).output 

在这一行:

{__longSum(${__time}, 900000)}

我的错误是什么?

1 个答案:

答案 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.)

我不清楚这是你的问题,但我能从评论中得到最好的结果。也许你应该更接近你的实际意图重新提出问题。