SwiftUI GKLeaderboard loadEntries

Posted

技术标签:

【中文标题】SwiftUI GKLeaderboard loadEntries【英文标题】: 【发布时间】:2020-11-15 23:21:00 【问题描述】:

我想在我的 SwiftUI 应用中添加排行榜。 我找不到任何使用 loadEntries 加载排行榜值的示例。 我尝试了以下...

let leaderBoard: GKLeaderboard = GKLeaderboard()
leaderBoard.identifier = "YOUR_LEADERBOARD_ID_HERE"
leaderBoard.timeScope = .allTime
leaderBoard.loadScores  (scores, error) in ...

这会导致以下警告:

“标识符”在 ios 14.0 中已弃用:使用 loadEntriesForPlayerScope:timeScope:range:completionHandler: 代替。 'timeScope' 在 iOS 14.0 中已弃用:使用 loadEntriesForPlayerScope:timeScope:range:completionHandler: 代替。 'loadScores(completionHandler:)' 在 iOS 14.0 中已弃用:使用 loadEntriesForPlayerScope:timeScope:range:completionHandler:.

使用 loadEntriesForPlayerScope 会导致以下警告:

'loadEntriesForPlayerScope(_:timeScope:range:completionHandler:)' 有 已重命名为 'loadEntries(for:timeScope:range:completionHandler:)'

使用 loadEntries 我不知道如何指定排行榜标识符。

【问题讨论】:

【参考方案1】:

这里是可能的方法的简单演示 - 将所有内容放入视图模型并显示视图上的负载分数。

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()
        
    

【讨论】:

我花了一些时间来测试这个,因为我必须先弄清楚如何验证用户。谢谢!【参考方案2】:

我可能说的很明显,但您看过 WWDC20 视频吗? 通常当有这样的大变化时,他们会在当年的 WWDC 期间进行报道。

Tap into Game Center: Leaderboards, Achievements, and Multiplayer

Tap into Game Center: Dashboard, Access Point, and Profile

我还没有看过这些视频,但documentation 认为identifier 可能会被var baseLeaderboardID: String 取代

【讨论】:

谢谢。我会看那些。我无法设置 baseLeaderboardID。这是一个只能获取的属性。

以上是关于SwiftUI GKLeaderboard loadEntries的主要内容,如果未能解决你的问题,请参考以下文章

什么叫LOA认证 应急灯申请SANS1464-22测试 法规解读

什么叫LOA认证 应急灯申请SANS1464-22测试 法规解读

什么叫LOA认证 应急灯申请SANS1464-22测试 法规解读

关于ImportError: libssl.so.10: cannot open shared object file: No such file or directory unable to loa

Swift:检索 LocalPlayer GC 分数

不可预测的 GameCenter 断开连接错误 [沙盒]