2014-10-30 4 views
1

Недавно я взял Swift, чтобы узнать, как программировать приложения для iOS. Я следовал за учебники Skip Уилсона и есть момент, когда он соединяет выход и получает:Swift:! вместо = nil

@IBOutlet var ticTacImg1: UIImageView = nil 

вместо того, что я получаю:

@IBOutlet var ticTacImg1: UIImageView! 

если я пытаюсь изменить его Xcode говорит мне это ошибка. Что я делаю не так?

ответ

1

@IBOutlet var ticTacImg1: UIImageView! - правильный код.

Свойство @IBOutlet должно быть необязательным, поскольку оно первоначально имеет значение nil, прежде чем система подключит его к нему. Пометка как неявно развернутая опция с ! означает, что она автоматически распаковывается всякий раз, когда она используется.

Я не уверен, какой конкретный учебник вы ссылаетесь, но моя первоначальная мысль заключается в том, что он может использовать раннюю бета-версию Xcode 6, которая не применяла это.

+0

И авария, если это ноль. – Abizern

+0

@Abizern Правильно, но в большинстве случаев переменная, подключенная к Storyboard, никогда не будет нулевой после инициализации. – nickgraef

3

В ранних версиях Xcode 6 все, что помечено как @IBOutlet, было превращено в слабое неявно развернутое дополнительное.

Это

@IBOutlet var ticTacImg1: UIImageView = nil 

будет скомпилирован как

@IBOutlet weak var ticTacImg1: UIImageView! = nil 

Это уже не так. Теперь вы должны объявить свой статус, но он все равно будет слабым.

Это

@IBOutlet var ticTacImg1: UIImageView! = nil 

будет скомпилирован как

@IBOutlet weak var ticTacImg1: UIImageView! = nil 

Причина ticTacImg1 не инициализируется nil является то, что это не имеет значения. В Swift неявно развернутые опции, которые не инициализированы, имеют значение nil, поэтому = nil является избыточным.