Swift中的无主自我lazy public var初始化会发出编译器错误,但不会发生私有var初始化

时间:2017-06-12 01:18:15

标签: swift compiler-errors protocols

为什么以下编译没有错误:

public class MyContainingViewModel {

    public var myViewModel: MyViewModel? {
        return privateMyViewModel
    }

    lazy private var privateMyStatusViewModel: MyViewModel? = { [unowned self] in
        ...
    }

但以下结果是错误:

public class MyContainingProtocol {
    public var quotedStatusViewModel: T1StatusViewModel? = { [unowned self] in

错误详情:

 MyViewModel.swift: 'unowned' may only be applied to class and class-bound protocol
 types, not '(MyContainingViewModel) -> () -> MyContainingViewModel'

1 个答案:

答案 0 :(得分:0)

主要问题是quotedStatusViewModel是一个实例变量而self尚不存在,因此您无法在块中使用它。它在第一个实例中编译好,因为它是lazy,这意味着self将在实际调用它时出现。