我的VC没有初始化程序

时间:2015-06-15 12:29:19

标签: swift delegates xcode6.3

当我使用XCode 6.1时,一切运行良好。拥有XCOde 6.3后,我遇到了委托方法的问题。

在:

levels(dados$a) <- union(levels(dados$a), new_record$a)
dados[2, ] <- new_record[1, ]
dados
#  a  b
#1 A  1
#2 G 99
#3 C  3

现在,Complier给出了错误,说MainPageLoaderViewController没有初始值设定项。我应该如何声明委托变量?

所有代码:

protocol MainPageLoaderViewControllerDelegate{
    func changeCategoryOfSingelTopicViewController(category: Int!)
}

class MainPageLoaderViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate, UIGestureRecognizerDelegate {

    var delegate: MainPageLoaderViewControllerDelegate?

    var categoryOfSingleTopic: Int! = 0 {
        didSet{        
            delegate?.changeCategoryOfSingelTopicViewController(categoryOfSingleTopic!)   
        }
    }    
}

}

3 个答案:

答案 0 :(得分:2)

在Swift中,所有实例变量都必须在init初始化(参见documentation)。在添加delegate之前,您的superview的初始化程序被调用(因为您没有覆盖它)并且您没有添加任何新的实例变量,所以这很好。但是,现在,您的superview的实现正在被调用,但它没有初始化您的变量,这是一个编译器错误。

两个选项:

1)只需在您的声明中初始化:var delegate: MainPageLoaderViewControllerDelegate? = nil  2)覆盖init并在那里初始化你的变量。

答案 1 :(得分:1)

我解决了这个问题,但仍然不明白它与“VC还没有启动器”这个问题有什么关系

我更改了代码:

var gestureRecognizerOfMainPageController: UIPanGestureRecognizer!

var gestureRecognizerOfMainPageController: UIPanGestureRecognizer?

答案 2 :(得分:0)

您需要为变量

设置setter方法
var delegate: MainPageLoaderViewControllerDelegate? {
    didSet {
        // Do whatever changes you wish to do
    }
}

或者有一个init用初始值实例化变量,或用你声明它的值初始化变量。