【发布时间】:2014-08-19 00:19:17
【问题描述】:
我有一个类似于下面的继承结构。我正在采用 Printable 协议并努力覆盖 description 属性。我遇到了一个奇怪的错误,此时谷歌似乎不知道,提示输入第三类,并引用第二类和第一类。
雪上加霜,下面的代码实际上编译得很好,但我的完整代码没有。在 Second 和 Third 上注释属性可以解决问题,代码编译、测试通过等。
Swift 继承章节提供了指向 this 的指针。
有谁知道它的含义以及触发它的情况?
/Users/ivanhoe/Dropbox/swift/convergence/Processable.swift:124:18: 错误:声明“描述”不能覆盖多个 超类声明 覆盖 var 描述:字符串 { ^ /Users/ivanhoe/Dropbox/swift/convergence/Processable.swift:85:18: 注意:覆盖的声明在这里 覆盖 var 描述:字符串 { ^ /Users/ivanhoe/Dropbox/swift/convergence/Processable.swift:28:18: 注意:覆盖的声明在这里 覆盖 var 描述:字符串 {
import Foundation
class First : NSObject, Printable {
override var description : String {
return "first"
}
}
class Second : First {
override var description : String {
return "second"
}
}
class Third : Second {
override var description : String {
return "third"
}
}
println(Third())
【问题讨论】:
-
"下面的代码实际上编译得很好" 然后你应该把它变成它不再编译的状态。我知道,这听起来很奇怪,因为通常你会走另一条路,但如果你想显示错误,你需要损坏的代码。
-
我同意,但我显然做不到。这就是我在上面的模型上从头开始的原因。我问了一个关于错误消息的具体问题,该错误消息看起来很明确,但在野外完全未知/未观察到。
-
它是 NSObject 的子类对您来说很重要吗?为什么?
-
目前对我的代码没有真正的影响,可以安全地跳过,对错误也没有影响,但我试图准确地表示错误情况
-
更正:NSObject 可以使 XCTAssertEqual 之类的断言起作用,因为我正在使用 TDD 开发一些东西......当然我可以只使用 XCTAssert 等,但这并不是真正的重点问题