无法在 属性 初始值设定项中将自己指定为委托

Cannot assign self as delegate in property initializer

我在 class 上初始化 属性 时尝试访问 self 时收到一条奇怪的错误消息。我的 class 好像是个奇怪的类型。

这是错误:

Cannot assign a value of type 'ViewController -> () ViewController' to a value of type 'ModelControllerDelegate?'

这是代码,操场上的简单示例:

import Foundation
import UIKit

protocol ModelControllerDelegate
    {
    func modelControllerDidFinishTask()
    }

class ModelController
    {
    var delegate : ModelControllerDelegate?
    }

class ViewController : UIViewController, ModelControllerDelegate
    {
    var modelController : ModelController =
        {
        let controller = ModelController()
        controller.delegate = self
        return controller
        }()

    func modelControllerDidFinishTask()
        {

        }
    }

当用这样的闭包初始化 属性 时,在实例完全初始化之前闭包是 运行。这意味着您不能在这里做一些事情:

  1. 访问其他 属性 个值
  2. 使用自己
  3. 调用任何实例方法

要解决这个问题,您可以在 ViewController 的初始化中完全初始化 modelController,或者至少将其委托的设置推迟到那时。

您正在尝试在未完全初始化的情况下使用 self。如果您使用惰性初始化可能会起作用:

lazy var modelController : ModelController = { ...