2017-03-27 105 views
0

我想在GameViewController中发生事件时,在View Controller中做一些事情。无法指定'()'类型的值来键入'CallbackBlock!'

所以这是我做的

在GameViewController

 typealias CallbackBlock =() -> Void 

     public class GameController { 
      var onAnagramSolved : CallbackBlock! 


    func inSomeMethod(){ 
     self.onAnagramSolved() 
    } 
} 

在视图控制器

public class ViewController: UIViewController { 

    var gameController: GameController! 


    public override func loadView() { 
     super.loadView() 

      gameController = GameController() 
    } 


    override public func viewDidLoad() { 
     super.viewDidLoad() 

     // This is where I get the error (which is the title) 
     gameController.onAnagramSolved = self.showLevelMenu() 

    } 



    func showLevelMenu(){ 
    // A method showing UIAlertController 

    } 

但后来我得到的错误说

Cannot assign a value of type '()' to type 'CallbackBlock!' 

其在斯威夫特3.

回答

1

尝试在方法名称后删除()。即,改变这一行:

gameController.onAnagramSolved = self.showLevelMenu() 

这样:

gameController.onAnagramSolved = self.showLevelMenu 

的第一语法为函数调用,另一个为函数参照(即,产生一个参考给定的函数)。

更明确的选择是使用封闭代替:

gameController.onAnagramSolved = { self.showLevelMenu() } 
+0

感谢很多人!你救了我的一天! – Aryan

相关问题