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

时间:2015-07-23 16:05:52

标签: ios swift swift-playground

当我在我的类上初始化属性时尝试访问self时,收到一条奇怪的错误消息。看起来我的班级有一种奇怪的类型。

这是错误:

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()
        {

        }
    }

2 个答案:

答案 0 :(得分:3)

您未尝试完全初始化时尝试使用self。如果你使用懒惰的初始化,可能会工作:

lazy var modelController : ModelController = { ...

答案 1 :(得分:2)

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

  1. 访问其他属性值
  2. 使用自我
  3. 调用任何实例方法
  4. 要解决此问题,您可以在ViewController的init中完全初始化modelController,或者至少推迟其委托的设置。