无法在 属性 初始值设定项中将自己指定为委托
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()
{
}
}
当用这样的闭包初始化 属性 时,在实例完全初始化之前闭包是 运行。这意味着您不能在这里做一些事情:
- 访问其他 属性 个值
- 使用自己
- 调用任何实例方法
要解决这个问题,您可以在 ViewController 的初始化中完全初始化 modelController,或者至少将其委托的设置推迟到那时。
您正在尝试在未完全初始化的情况下使用 self
。如果您使用惰性初始化可能会起作用:
lazy var modelController : ModelController = { ...
我在 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()
{
}
}
当用这样的闭包初始化 属性 时,在实例完全初始化之前闭包是 运行。这意味着您不能在这里做一些事情:
- 访问其他 属性 个值
- 使用自己
- 调用任何实例方法
要解决这个问题,您可以在 ViewController 的初始化中完全初始化 modelController,或者至少将其委托的设置推迟到那时。
您正在尝试在未完全初始化的情况下使用 self
。如果您使用惰性初始化可能会起作用:
lazy var modelController : ModelController = { ...