在将一个应用程序从Objective-C重构为Swift时,我遇到了一个问题,我无法自行解决。
ViewControllerOne
有方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
。在这种方法中,我设置destinationViewController
:
ViewControllerTwo *viewControllerTwo = [segue destinationViewController];
和一些这样的块处理程序:
[viewControllerTwo setHandlerOne:^(id sender) {
[...]
}]
然后在触摸按钮时,我正在显示模态视图。
在模态视图控制器ViewControllerTwo
中,我将关闭此模态视图:
- (IBAction)buttonPressed:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
self.handlerOne(sender);
}
在Swift代码中,我设置了相同的内容:
ViewControllerOne
方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
设置destinationViewController
let vc = segue.destinationViewController as! ViewControllerTwo
代码块:
vc.setHandlerOne { () -> Void in
[...]
}
这样我就会收到错误Value of type 'ViewControllerTwo' has no member 'setHandlerOne'
。我在这里错过了什么?我是否必须在viewControllerTwo
?
答案 0 :(得分:0)
我认为你的destinationViewController不是ViewControllerTwo类型,或者如果你的destinationViewController是ViewControllerTwo类型,那么ViewControllerTwo可能不包含setHandlerOne方法。
答案 1 :(得分:0)
在Swift中你可以做你所描述的:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let viewControllerTwo: ViewControllerTwo = segue.destinationViewController as? ViewControllerTwo{
viewControllerTwo.setHandler({ (sender) in
})
}
}
并在ViewControllerTwo
中定义方法:
func setHandler(completion:((AnyObject?) -> Void)?){
}
我发布了带有完成块的版本......