gpt4 book ai didi

swift - 设置 GKLocalPlayer 的 authenticateHandler 属性时不编译闭包 - Swift 3.0

转载 作者:行者123 更新时间:2023-11-28 06:29:42 25 4
gpt4 key购买 nike

Thisthis不要编译。

我的 SpriteKitSceneViewController 中的代码,

var localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {((viewController : UIViewController?, error : NSError?) -> Void)? in
//handle authentication
}

产生这些错误:
一行中的连续语句必须用';'分隔
预期表达

经过身份验证的属性定义为:

var authenticateHandler: ((UIViewController?, Error?) -> Void)? { get set }

我已经阅读了关于闭包的文档,但我没有找到关于可选闭包的任何内容。我考虑过使用一个函数,但我也无法让它工作。我该如何编译?

最佳答案

你需要写closure-signatureclosure-expression 的顶部. (它是有条件的可选。)

在您的代码中 ((viewController : UIViewController?, error : NSError?) -> Void)? 不是有效的闭包签名,您需要删除最外层(...)?

当你显式地写参数类型时,它们需要与闭包类型的参数类型完全匹配。因此,您的第二个参数的类型需要是 Error?,而不是 NSError?

解决了上面两件事,你可以这样写:

localPlayer.authenticateHandler = {(viewController : UIViewController?, error : Error?) -> Void in
//handle authentication
}

但是省略所有不需要的部分,你可以更容易地编写它:

localPlayer.authenticateHandler = {viewController, error in
//handle authentication
}

在大多数情况下,您可以省略->Void,并且几乎在所有情况下,Swift 都可以推断出参数类型。我更喜欢省略类型注释,因为 Swift 永远不会推断出它们。

关于swift - 设置 GKLocalPlayer 的 authenticateHandler 属性时不编译闭包 - Swift 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com