Почему playground добавляет к результатам getter «some»

#ios #xcode #swift #ios8 #swift-playground

#iOS #xcode #swift #ios8 #swift-игровая площадка

Вопрос:

Я перевел код Objective C из руководства по карточным играм Стэнфорда на Swift и поиграл в Playground, чтобы проверить это.

Однако, когда я вызываю свойства getters моего экземпляра 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?

Ответ №1:

Поскольку ваше свойство определено как String? его значение на самом деле является перечислением OptionalString, которое указывает, имеет ли оно значение (some) и его значение.

Причина, по которой getSuit просто возвращает «spade», заключается в том, что она определена как -> String . Если вы измените его на -> String? , то получите тот же результат — (some "spade")

Если вы измените свою строку на cardtest.suit! , то получите значение «spade» — the ! разворачивает необязательное значение