2015-09-22 2 views
1

Я столкнулся с каким-то старым кодом Swift (плохо написано с того момента, когда я впервые играл с языком в июне), и мне было любопытно, почему функция test терпит неудачу, но test2 работает?Быстрая слабая переменная поведенческая разница?

fatal error: unexpectedly found nil while unwrapping an Optional value 

Его глупый пример как self.node потребует добавления в сцену. Я был просто любопытно, почему они ведут себя по-другому, я думаю, что это, возможно, так, как каждый из них реализован, или способ, которым корреспондент обрабатывает каждого, зная правильное использование.

class GameScene: SKScene { 
    weak var node: SKNode! 
    weak var color: SKColor! 

    func test() { 
     self.node = SKNode() 
     print(self.node) // Why nil here? 
    } 

    func test2() { 
     self.color = SKColor() 
     print(self.color) // Works fine ... 
    } 
} 

Я понимаю, что объекты создаются в рамках функции и присваивается переменной, объявленной как слабые, его о том, почему разница?

ответ

2

Проще говоря, значение слабой переменной будет определено только во время выполнения. Вы можете узнать больше об этом по адресу: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID48

+0

Большое спасибо, я проверю это. Спасибо, Sir – fuzzygoat

+0

Можете ли вы вставить абзац/объяснение, на которое вы ссылаетесь, единственное, что я могу найти в связанном документе: «Слабые ссылки должны быть объявлены как переменные, чтобы указать, что их значение может измениться во время выполнения. объявленной как константа ». – fuzzygoat

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