ios - 为什么 playground 在 getter 结果前加上 "some"

标签 ios xcode swift ios8 swift-playground

我将 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/

相关文章:

ios - NSFetchedResultsController 在更新关系后从 UITableView 中删除行

ios - NavigationLink 不适用于 SwiftUI 中列表内的 ScrollView

swift 4。字典合并

ios - accountsWithAccountType 返回空数组

iphone - AVAudioPlayer 不会在 15 次中播放一次音频

ios - 在委托(delegate)内部访问时 IBOutlet 值为零

ios - 我可以从 Swift 中的 SecKeyRef 对象获取模数或指数吗?

ios - 获取视频名称 AlAssetLibrary

xcode - Swift @autoclosure 打破了 v1.2 中枚举案例的兼容性

ios - 整数文字存储到 'UInt' 时溢出