我将 Stanford 的 Card Game 教程的 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 函数中返回它?
最佳答案
因为你的属性定义为String?
,它的值实际上是一个OptionalString枚举,表示它是否有值(some)和它的值。
getSuit 只返回“黑桃”的原因是它被定义为-> String
。如果将其更改为 -> String?
那么您将得到相同的结果 - (some "spade")
如果您将行更改为 cardtest.suit!
,那么您将获得值“spade” - the !展开可选值
关于ios - 为什么 playground 在 getter 结果前加上 "some",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604569/