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

时间:2015-03-03 00:32:24

标签: ios swift uiviewcontroller

我创建了名为MyHelper.swift的文件 我在里面创建了一个类:

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
}

但我收到的错误是:

**

  

类“ViewController”没有初始值设定项。

**

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

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

它引起了另一个错误。

然后我尝试了来自互联网的代码:

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

它说:

  

属性self.myHelper未在super.init调用中初始化

我怎么能在UIViewController中使用MyHelper类的对象!

3 个答案:

答案 0 :(得分:2)

这是Swift编译时的工作时间。

您需要在MyHelper方法中设置init,或将其标记为可选(请注意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
}

答案 1 :(得分:1)

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

var myHelper: MyHelper? = nil

答案 2 :(得分:1)

您可以选择myHelper

var myHelper:MyHelper?

使用时,首先用以下内容打开它:

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

或者,您可以使用!打开包装:

myHelper!.yourFunction()

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