我将斯坦福大学卡片游戏教程的Objective C代码翻译成Swift,并在Playground玩游戏进行检查。
但是,当我调用我的PlayingCard实例的属性getter时,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函数中返回?
答案 0 :(得分:2)
因为您的属性被定义为String?
,所以它的值实际上是一个OptionalString枚举,用于指示它是否具有值(某些)及其值。
getSuit刚刚返回&#34; spade&#34;是它被定义为-> String
。如果您将其更改为-> String?
,那么您将获得相同的结果 - (some "spade")
如果您将行更改为cardtest.suit!
,那么您将获得值&#34; spade&#34; - !展开可选值