【问题标题】:Lazy property init with self variable具有自变量的惰性属性初始化
【发布时间】:2018-05-15 16:17:25
【问题描述】:

注意:此问题存在于 Xcode 8 和 Swift 3.1 中。 Xcode 9 和 Swift 4 运行良好

我有一个带有惰性变量的简单视图控制器。它是从情节提要中实例化的。代码如下:

import UIKit

final class ChildViewController: UIViewController {

    private lazy var barButton = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.rightBarButtonItems = [barButton]
    }

    func addBookmark() {
        print("Bookmark Added")
    }

}

问题是barButton 变量不是在viewDidAppear(_:) 调用中初始化的,而是在init(withCoder:) 调用之后直接初始化的。而此时self变量为nil。我尝试了自己的课,结果是一样的。

但是当我像这样声明惰性变量时,一切正常:

private lazy var barButton: UIBarButtonItem = {
    UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))
}()

为什么惰性变量是这样初始化的?`

你可以试试example project

【问题讨论】:

  • Xcode 10 ?我错过了什么吗?
  • 抱歉,现在已经修复了。

标签: ios swift lazy-initialization


【解决方案1】:

无法运行,但我觉得这样可以,试试写

   private lazy var barButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))

【讨论】:

  • 这和我的表达一样,没有区别。
猜你喜欢
  • 2021-11-21
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多