1

我将斯坦福纸牌游戏教程的 Objective C 代码翻译成 Swift 并在 Playground 中玩耍以查看它。

但是,当我调用 PlayingCard 实例的属性获取器时,Playground 会在结果前面加上“some”:

class PlayingCard:Card{


    var suit:String? = "?"
    var rank:Int?

    func getSuit() -> String{
        return self.suit!
    }

    func setSuit(suit:String){

        let validity_check = self.validSuits.contains(suit)
        if validity_check{
            self.suit = suit
        }

    }


    func setRank(rank:Int){
        if rank <= maxRank{
            self.rank = rank
        }
    }



}



var array:Array = ["hi", "world"]

array.contains("HI")


let cardtest = PlayingCard()
cardtest.suit => returns {some "spade"}
cardtest.getSuit() => returns "spade"
cardtest.rank => returns {some 10}

这是什么意思?为什么它在属性 getter 而不是在自定义 getter 函数中返回它?

4

1 回答 1

2

因为你的属性被定义为String?它的值实际上是一个 OptionalString 枚举,表示它是否有一个值(一些)和它的值。

getSuit 只返回 "spade" 的原因是它被定义为-> String. 如果您将其更改为-> String?then 您将得到相同的结果 -(some "spade")

如果您将您的线路更改为cardtest.suit!then 您将获得值“铲子” - !解开可选值

于 2014-07-07T07:23:50.887 回答