Это нормально, что свойство lazy var инициализируется дважды?

Я встретил очень странный случай использования свойства сlazy ключевое слово. Я знаю, что это ключевое слово указывает на то, что инициализация свойства откладывается до тех пор, пока переменная не будет фактически использоваться и просто запуститсяодин раз.

Тем не менее, я обнаружил, что инициализация запускается дважды.

class TestLazyViewController: UIViewController {

    var name: String = "" {
        didSet {
            NSLog("name self = \(self)")
            testLabel.text = name
        }
    }

    lazy var testLabel: UILabel = {
        NSLog("testLabel self = \(self)")
        let label = UILabel()
        label.text = "hello"
        self.view.addSubview(label)
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        testLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
        NSLayoutConstraint.activateConstraints([NSLayoutConstraint(item: testLabel, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1.0, constant: 0.0)])
        NSLayoutConstraint.activateConstraints([NSLayoutConstraint(item: testLabel, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1.0, constant: 0.0)])
    }

    @IBAction func testButton(sender: AnyObject) {
        testLabel.text = "world"
    }
}

Я написал контроллер представления для теста. Этот контроллер представления представлен другим контроллером представления. Затем,name свойство установлено вprepareForSegue контроллера представления представления.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let vc = segue.destinationViewController as! TestLazyViewController
    println("vc = \(vc)")
    vc.name = "hello"
}

После запуска теста мне удалось получить следующий результат.

vc = <testLazy.TestLazyViewController: 0x7fb3d1d16ec0>
2015-05-25 00:26:15.673 testLazy[95577:22267122] name self = <testLazy.TestLazyViewController: 0x7fb3d1d16ec0>
2015-05-25 00:26:15.673 testLazy[95577:22267122] testLabel self = <testLazy.TestLazyViewController: 0x7fb3d1d16ec0>
2015-05-25 00:26:15.674 testLazy[95577:22267122] testLabel self = <testLazy.TestLazyViewController: 0x7fb3d1d16ec0>

Как видите, код инициализации выполняется дважды. Я не знаю, что это ошибка или неправильное использование. Есть кто-нибудь, кто дает мне знать, что не так?

У меня также есть предположение, что это не правильно, чтоtestLabel добавлен вself.view в коде инициализации. Я не уверен, что код неправильный. Это всего лишь мое предположение.

ОБНОВИТЬ:
Я до сих пор не понимаю, почему ленивая инициализация выполняется дважды. Это действительно ошибка Свифта?

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:
@matt отлично объяснил, что эта проблема инициализируется дважды. Хотя все исходит из моего неправильного кода, я мог бы получить ценные знания о том, какlazy ключевое слово работает. Спасибо, Мэтт.

Ответы на вопрос(1)

Ваш ответ на вопрос