ios - 如何使用 swift 函数 loadLeaderboardSets WithCompletionHandler

标签 ios swift gamekit game-center-leaderboard

GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler(_ completionHandler: (([GKLeaderboardSet]?,NSError?) -> Void)?)

我正在尝试使用此类函数从 Game Center 检索排行榜集的信息。

            var leaderboardSetsRetrived = [""]
        GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler({ (leaderboardSets, error) -> Void in
            leaderboardSetsRetrived = leaderboardSets
        })

这是我尝试做的,但是 xcode 说

"Cannot convert value of type '([String], _) -> Void' to expected argument type '(([GKLeaderboardSet]?, NSError?) -> Void)?"

我应该为参数添加什么?

游戏中心编程指南告诉我要做什么:

Before you can load the leaderboards contained within a set, you must load the set itself. Retrieve the list of leaderboard sets for your game from Game Center and display their titles. Use the loadLeaderboardSetsWithCompletionHandler: method to retrieve the leaderboard sets for your app. You can then load the leaderboards for a specific leaderboard set using the loadLeaderboardsWithCompletionHandler: method.

@available(iOS 7.0, *)
public class GKLeaderboardSet : NSObject, NSCoding, NSSecureCoding {

    public var title: String { get } // Localized set title.

    public var groupIdentifier: String? { get } // set when leaderboardSets have been designated a game group; set when loadLeaderboardSetsWithCompletionHandler has been called for leaderboards that support game groups
    public var identifier: String? // leaderboard set.

    // Loads array with all sets for game
    // Possible reasons for error:
    // 1. Communications problem
    // 2. Unauthenticated player
    // 3. Set not present
    @available(iOS 7.0, *)
    public class func loadLeaderboardSetsWithCompletionHandler(completionHandler: (([GKLeaderboardSet]?, NSError?) -> Void)?)

    // Loads array with all leaderboards for the leaderboardSet
    // Possible reasons for error:
    // 1. Communications problem
    // 2. Unauthenticated player
    @available(iOS 7.0, *)
    public func loadLeaderboardsWithCompletionHandler(completionHandler: (([GKLeaderboard]?, NSError?) -> Void)?)
}

extension GKLeaderboardSet {

    // Asynchronously load the image. Error will be nil on success.

    public func loadImageWithCompletionHandler(completionHandler: ((UIImage?, NSError?) -> Void)?)
}

来自 GKLeaderboardSet.h 的代码

现在我的代码可以运行了。

GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler({ (leaderboard, error) -> Void in
            })

但是由于某种原因该函数没有接收任何参数。我无法将应该检索到的 leaderboardSets 保存到我创建的变量中。根据 GKLeaderboard 类引用:

Parameters:

completionHandler

A block that is called when the categories have been retrieved from the server.

The block receives the following parameters:

leaderboardSets
An array of GKLeaderboardSet objects that provides the leaderboard sets for your game. If an error occurred, this value may be non-nil. In this case, the array holds whatever data Game Kit was able to download before the error occurred.

error
If an error occurred, this error object describes the error. If the operation completed successfully, the value is nil.

最佳答案

现已修复。我犯的一个错误:leaderboardSetsRetrieved应该是[GKLeaderboardSet]而不是字符串数组。二、出于某种原因leaderboardSetsRetrived = leaderboardSets确实有效,只是 Xcode 不会自动完成 leaderboardSets由于某种原因,我认为参数有问题。

关于ios - 如何使用 swift 函数 loadLeaderboardSets WithCompletionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825427/

相关文章:

java - iOS 和 Java 之间的公钥交换

ios - 如何在 iOS App 的所有 View Controller 中重用相同的 UIView

ios - findMatch 与具有不同游戏模式的 iOS GameCenter

ios - 是否可以在其他 iOS 应用程序中访问 iOS 游戏应用程序的分数?

ios - 在App Store上的唯一名称

xcode - ConvertPointToView 函数在 Swift Xcode 7 Beta 中不起作用

swift - 检查一个 Int 值是否大于或等于另一个 Int?值(value)?

ios - 如何发送值为image、key为 'file'的图片文件

iphone - GKSession 的问题。无法识别可用设备

iphone - 键盘到位时移动 UIScrollView