gpt4 book ai didi

ios - 从 swift 类到协议(protocol)的转换时出错

转载 作者:行者123 更新时间:2023-11-30 12:44:35 25 4
gpt4 key购买 nike

我有一段代码:

protocol ModuleOutput: class {
var output: Any! { get }
}

class SomeClass {
var output: Any!
init() {
self.output = "ervwe"
}
func getIt() {
let r = (self as! ModuleOutput).output
}
}

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

exc_bad_instruction (code=exc_i386_invop subcode=0x0) 

在这一行中:

(self as! ModuleOutput).output 

我的错误是什么?

最佳答案

完全同意哈米什和瓦迪安的观点。 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 之前,添加了 @optical 时),因此在旧代码中这并不奇怪。但这不是问题。只要符合它:

extension InformallyConformingVC: TranditionalViewWithOutput {}

如果它在语法上已经符合,那么就告诉编译器它完全符合。 (Swift protocols are not just bags of syntax.)

我不清楚这是否真的是你的问题,但这是我从评论中可以看出的最好的问题。也许您应该重新表述问题,使其更接近您的实际意图。

关于ios - 从 swift 类到协议(protocol)的转换时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com