#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 ! разворачивает необязательное значение