在 swift 的 UIViewController 中声明新对象时出错

error when declaring a new object in a UIViewController in swift

我创建了名为 MyHelper.swift 的文件 我在其中创建了 class:

public class MyHelper{
    //..... variables here
    public init(list listOfViews: [UIView]){
        self.listOfViews = listOfViews
        self.time = 1.0;
    }

}

然后我像这样在 UIViewController 中声明了一个对象

class ViewController: UIViewController {

    var myHelper: MyHelper;

    override func viewDidAppear(animated: Bool) {

        myHelper = MyHelper(listOfViewsToAnimatin: listOfViews)
    }

    // ..... rest of the code
}

但我收到错误消息:

**

Class "ViewController" has no initializers.

**

我尝试了 xcode 中建议的默认修复:

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

它导致了另一个错误。

然后我从互联网上尝试了这段代码:

required init(coder aDecoder: NSCoder!)
{
    super.init(coder: aDecoder)
}

它说:

Property self.myHelper not initialized at super.init call

我究竟如何在 UIViewController 中使用 MyHelper class 的对象!?

您正在初始化 viewDidAppear 中的 MyHelper。它需要在 init 中初始化(在 super.init() 之前)或者你需要将其声明为可选并设置为 nil。

var myHelper: MyHelper? = nil

您可以将 myHelper 设为可选:

var myHelper:MyHelper?

使用时,先解包:

if let myHelper = myHelper {
    myHelper.yourFunction()
} else {
    // self.myHelper == nil
}

或者您可以使用 !:

解包

myHelper!.yourFunction()

但如果 myHelper 为 nil,它会崩溃。

这是Swift的编译时检查工作。

您需要在 init 方法中设置 MyHelper,或者将其标记为可选(注意 var 声明末尾的问号):

class ViewController: UIViewController {

    var myHelper: MyHelper?

    required init(coder aDecoder: NSCoder!)
    {
        super.init(coder: aDecoder)
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        myHelper = MyHelper(listOfViewsToAnimatin: listOfViews)
    }

    // ..... rest of the code
}