Ios 无法在属性初始值设定项中将自身指定为委托
在初始化类上的属性时,当我尝试访问self时,收到一条奇怪的错误消息。我的班级似乎有一种奇怪的类型 这就是错误:Ios 无法在属性初始值设定项中将自身指定为委托,ios,swift,swift-playground,Ios,Swift,Swift Playground,在初始化类上的属性时,当我尝试访问self时,收到一条奇怪的错误消息。我的班级似乎有一种奇怪的类型 这就是错误: Cannot assign a value of type 'ViewController -> () ViewController' to a value of type 'ModelControllerDelegate?' 以下是游戏场中的代码和简单示例: import Foundation import UIKit protocol ModelControllerDe
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的init中完全初始化modelController,或者至少将其委托的设置推迟到那时 使用这样的闭包初始化属性时,闭包会在实例完全初始化之前运行。这意味着这里有几件事你不能做:
要解决这个问题,您可以在ViewController的init中完全初始化modelController,或者至少将其委托的设置推迟到那时 您试图在未完全初始化时使用
self
。如果使用惰性初始化,可能会起作用:
lazy var modelController : ModelController = { ...
您试图在未完全初始化时使用
self
。如果使用惰性初始化,可能会起作用:
lazy var modelController : ModelController = { ...