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)
}
}
}
}
我犯了一个错误,但我不知道如何解决。我想从 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)
}
}
}
}