2015-11-26 3 views
0

Я пытаюсь научиться быстро, и я читаю эту статью https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html. В классе VideoMode такой объект, как resolution типа Resolution создан как собственность VideoMode класс. После этого создается объект let someVideoMode = VideoMode() из VideoMode. Класс width объект Resolution struct by someVideoMode.resolution.width. Эта концепция понятна мне. Но я перед проблемой, когда я читаю эту статью https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html#//apple_ref/doc/uid/TP40014097-CH21-ID245Доступ к переменной типа класса из другого класса в swift

В этой статье Person класса просто создать свойство var residence: Residence? из Residence класса. Не создавать объект. После этого создайте объект johnPerson класс и доступ к собственности Residence класса. Что здесь происходит? Скажите, пожалуйста, как Person класс доступа собственности Residence класс?

+0

Вернуться к [ «Основе»] (https://developer.apple.com/library/ios/documentation /Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309) и прочитайте о дополнительных значениях. – molbdnilo

+0

Непонятно, что вы сказали. Не могли бы вы объяснить это? – Alamin

ответ

1

Во втором случае у нас есть свойство optional и по умолчанию оно инициализируется nil. Если мы посмотрим на то, что дополнительный тип, то мы увидим, что это перечисление, как:

enum Optional<T> { 
    case Some(T) 
    case None 
} 

И это может быть Some типа как Int, например, или Residence или None и в данном случае это имеет нулевую ценность. И по умолчанию в вашем примере это None и в этом коде из документации:

if let roomCount = john.residence?.numberOfRooms { 
    print("John's residence has \(roomCount) room(s).") 
} else { 
    print("Unable to retrieve the number of rooms.") 
} 

он напечатает

«Не удалось получить количество номеров.»

Но если вы инициализации residence так:

let john = Person() 

// Init residence 
john.residence = Residence() 

if let roomCount = john.residence?.numberOfRooms { 
    print("John's residence has \(roomCount) room(s).") 
} else { 
    print("Unable to retrieve the number of rooms.") 
} 

он будет печатать:

"резиденция Джона 1 комната (ы)"

, поскольку дополнительный тип enum возвратит Some(Residence), и вы будете иметь доступ к нему ценит

+0

Спасибо за хороший ответ. Но мой вопрос не является «необязательным». Я просто хочу знать, как второе свойство класса доступа к статье без объявления объекта? – Alamin

+0

Это не свойство класса, оно создает объект со значением по умолчанию nil, потому что это необязательное свойство –

+0

Еще раз спасибо. Теперь, я понимаю. – Alamin

Смежные вопросы