Pet*_* F. 1 gamekit game-center-leaderboard swiftui
我想将排行榜添加到我的 SwiftUI 应用程序中。
我找不到任何使用 loadEntries 加载排行榜值的示例。我尝试了以下...
let leaderBoard: GKLeaderboard = GKLeaderboard()
leaderBoard.identifier = "YOUR_LEADERBOARD_ID_HERE"
leaderBoard.timeScope = .allTime
leaderBoard.loadScores { (scores, error) in ...
Run Code Online (Sandbox Code Playgroud)
这会导致以下警告:
使用 loadEntriesForPlayerScope 会导致以下警告:
使用loadEntries我不知道如何指定排行榜标识符。
这是可能的方法的简单演示 - 将所有内容都放在视图模型中并在视图上显示加载分数。
import GameKit
class BoardModel: ObservableObject {
private var board: GKLeaderboard?
@Published var localPlayerScore: GKLeaderboard.Entry?
@Published var topScores: [GKLeaderboard.Entry]?
func load() {
if nil == board {
GKLeaderboard.loadLeaderboards(IDs: ["YOUR_LEADERBOARD_ID_HERE"]) { [weak self] (boards, error) in
self?.board = boards?.first
self?.updateScores()
}
} else {
self.updateScores()
}
}
func updateScores() {
board?.loadEntries(for: .global, timeScope: .allTime, range: NSRange(location: 1, length: 10),
completionHandler: { [weak self] (local, entries, count, error) in
DispatchQueue.main.async {
self?.localPlayerScore = local
self?.topScores = entries
}
})
}
}
struct DemoGameboardview: View {
@StateObject var vm = BoardModel()
var body: some View {
List {
ForEach(vm.topScores ?? [], id: \.self) { item in
HStack {
Text(item.player.displayName)
Spacer()
Text(item.formattedScore)
}
}
}
.onAppear {
vm.load()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |