Swift 中的块:return 错误“不可转换为”

block in Swift : return error " is not convertible to "

我犯了一个错误,但我不知道如何解决。我想从 GameScene 加载所有资产并在完成方法中发送 Bool 。我使用 typealias :是否应该为两个文件(gameScene 和 gameController)重命名两次?

然后我在这一行出现错误 GameScene.loadSceneAssetsWithCompletionHandler{ :

((Bool) -> Void) is not convertible to 'GameScene'

这是代码:

    //gameController:
    typealias OnComplete = (Bool) -> ()
    override func viewDidLoad() {
        super.viewDidLoad()

        GameScene.loadSceneAssetsWithCompletionHandler{ (success:Bool)->Void in
            println("2/ yes")
            return
        }



    //gameScene : rewrite typealias? 
    typealias OnComplete = (Bool) -> ()

    func loadSceneAssetsWithCompletionHandler( completion:OnComplete ) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { () -> Void in
            self.loadSceneAssets()

            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                println("1/ yes")
                completion(true)
            })//main
        })//global
    }

我看了一些帖子说要添加一个"return",但它并没有解决这里的错误。

谢谢

它几乎可以正常工作,但是这里有一些地方出了问题。首先,你不能重新声明一个typealias。其次,当 loadSceneAssetsWithCompletionHandler 设置为实例函数时,您将其作为 class 函数调用。注释更改:

typealias OnComplete = (Bool) -> ()
class GameController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        GameScene.loadSceneAssetsWithCompletionHandler { success in
            println("2/ yes")
            return
        }
    }

}


class GameScene:  UIViewController {

    func loadSceneAssets() {

    }

    class func loadSceneAssetsWithCompletionHandler( completion:OnComplete ) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
           let gameScene = GameScene()
           gameScene.loadSceneAssets()

            dispatch_async(dispatch_get_main_queue()) {
                println("1/ yes")
                completion(true)
            }
        }
    }
}