当我使用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!)
}
}
}
}
答案 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用初始值实例化变量,或用你声明它的值初始化变量。