我在 Playground 中定义了一个子类和一个父类(super class),它们代表 Swift 中的 Card 和 PlayingCard。
Card 中有一个带有 getter 的计算属性,称为 desc。我已经在子类中重写了它,以便根据仅在子类中定义的其他两个属性来计算它。
这一切在 Playground 上运行良好,并按预期打印出“Ace Spades”。
import Cocoa
class Card {
var desc: String {
get { return "Default description." }
}
}
class PlayingCard: Card {
var suit: String
var rank: String
override var desc: String {
get { return rank + " " + suit }
}
init(suit: String, rank: String) {
self.suit = suit
self.rank = rank
super.init()
}
}
let baseCard = PlayingCard(suit: "Spades", rank: "Ace")
var desc: String
desc = baseCard.desc
println (desc)
然后我尝试实例化同一张扑克牌并访问 desc 变量,但在 ViewController 中如下所示:
import UIKit
class ViewController: UIViewController {
@IBAction func touchCardButton(sender : UIButton)
{
let baseCard = PlayingCard(suit: "Spades", rank: "Ace")
var desc: String
desc = baseCard.desc
}
}
但是,这会导致以下错误: “desc”的使用不明确
更新:当我在问题导航器中展开错误时,它指向它发现不明确的两个候选者:
- 在 Card 类中 -
var desc: String {
- 在 PlayingCard 类中 -
覆盖 var desc: String {
帮助文档中似乎没有任何内容表明我做错了什么,而且我在网上找不到任何对该错误的引用。
有什么想法吗?
编辑:我已经删除了 setter,并使 getter 纯粹是一个计算属性,遵循下面关于计算属性的滥用的评论/答案。但是,现在正确使用它作为计算属性,我仍然收到 Ambigously use of 'desc'
错误。
最佳答案
这可能与以下已知错误有关:
关于compiler-errors - 对被覆盖属性给出的错误使用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24084457/