Compiler errors 对重写属性指定的错误使用不明确

Compiler errors 对重写属性指定的错误使用不明确,compiler-errors,swift,Compiler Errors,Swift,我在操场中定义了一个子类和一个超类,它们在Swift中表示一张牌和一张玩牌 在名为desc的卡中有一个带有getter的computed属性。我在子类中重写了该属性,以便从仅在子类中定义的两个其他属性计算该属性 这一切在操场上运行良好,并按预期打印出“王牌黑桃” import Cocoa class Card { var desc: String { get { return "Default description." } } } class PlayingCard

我在操场中定义了一个子类和一个超类,它们在Swift中表示一张牌和一张玩牌

在名为desc的卡中有一个带有getter的computed属性。我在子类中重写了该属性,以便从仅在子类中定义的两个其他属性计算该属性

这一切在操场上运行良好,并按预期打印出“王牌黑桃”

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”的用法不明确

更新:当我展开问题导航器中的错误时,它指向两个它发现不明确的候选项:

  • 类内卡片-
    var desc:String{
  • 类内播放卡片-
    覆盖变量描述:字符串{
在帮助文档中似乎没有任何东西指出我做错了什么,我也找不到任何在线错误的参考

有什么想法吗


编辑:我已经删除了setter,并在下面关于滥用计算属性的注释/回答之后,将getter变成了纯计算属性。但是,现在将其正确用作计算属性,我仍然得到了“desc”的
模糊用法。

这可能是一个注释,但是因为我还不能这么做

var desc: String {
    get { return self.desc }
    set { self.desc = newValue }
    }
是错误的。如果您使用的是计算属性,则没有
self.desc
。正如苹果的语言指南所说

除了存储的属性外,类、结构和枚举还可以定义计算属性,这些属性实际上并不存储值。相反,它们提供了一个getter和一个可选setter来间接检索和设置其他属性和值


因此,您的计算属性不能依赖于将自身用作存储属性。事实上,它一开始就不应该是计算属性。

这可能与以下已知错误有关:


如果您使用
var desc:String=baseCard.desc会发生什么?另外,您的视图控制器上是否有
desc
属性?@Jiaaro-如果我使用
var desc:String=baseCard.desc
,我会遇到同样的错误。我的视图控制器中也没有desc属性。请参阅我在原始帖子中关于这两个候选Xcode试图与Swift中的.cs193p,赋值#1进行比较。我正在处理完全相同的事情,并发现此页面正在寻求帮助。存储属性在base中,计算属性在sub中。在我的情况下,我是在调试“drawRandomCard()时得到它的方法。没有我的帮助,但我会回来的,如果我找到它。