2014-07-07 50 views
1

我將斯坦福大學卡片遊戲教程的Objective C代碼翻譯成Swift,並在Playground中玩耍以檢查它。爲什麼遊樂場會將「get」結果與「某些」相提並論

然而,當我打電話給我的遊戲牌實例的屬性干將,遊樂場預先考慮用「一些」的結果:

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函數中返回?

回答

2

因爲你的屬性被定義爲String?它的值實際上是一個OptionalString枚舉,它指示它是否有值(some)及其值。

getSuit剛剛返回「spade」的原因是它被定義爲-> String。如果您將其更改爲-> String?,那麼你將得到同樣的結果 - (some "spade")

如果您改變行cardtest.suit!,那麼你將獲得價值「鏟」 - 的!解開可選值