Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法在属性初始值设定项中将自身指定为委托_Ios_Swift_Swift Playground - Fatal编程技术网

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

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

在初始化类上的属性时,当我尝试访问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()
        {

        }
    }

当使用这样的闭包初始化属性时,闭包会在实例完全初始化之前运行。这意味着这里有几件事你不能做:

  • 访问其他属性值
  • 使用自己
  • 调用任何实例方法

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

    使用这样的闭包初始化属性时,闭包会在实例完全初始化之前运行。这意味着这里有几件事你不能做:

  • 访问其他属性值
  • 使用自己
  • 调用任何实例方法

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

    您试图在未完全初始化时使用
    self
    。如果使用惰性初始化,可能会起作用:

    lazy var modelController : ModelController = { ...
    

    您试图在未完全初始化时使用
    self
    。如果使用惰性初始化,可能会起作用:

    lazy var modelController : ModelController = { ...