繁体   English   中英

游戏结束时,我需要将持有分数的变量“发送”到表视图控制器

[英]When my game ends I need to 'send' the variable holding the score to a table view controller

游戏结束时,我需要将保存分数的变量“发送”到表视图控制器。 我尝试通过

//In LeaderboardTableVC.swift
var gameScore:Int! = 0

//In GameScene.swift
var leadVC: LeaderboardTableVC!
var score:Int = 0

func showLeaderboard(){

    let sb = UIStoryboard(name: "Main", bundle: nil)
    let leaderBoardVC = sb.instantiateViewController(withIdentifier: "leaderboard")
    self.vc.navigationController?.pushViewController(leaderBoardVC, animated: true)
    leadVC.gameScore = score

}

但是,当我运行代码时,会发生错误:'leadVC.gameScore = score'代码行上“意外发现nil,同时展开了一个可选值”。 有什么建议么?

您已经实例化了leaderBoardVC ,但是从未设置leadVC属性。 因此,当您尝试设置gameScore时, leadVC仍然nil ,因此当它尝试对此隐式解包的可选内容进行强制解包时,它会崩溃。

坦白说,我可能会完全淘汰leadVC属性,从而完全避免了这个问题。 为什么需要此属性? 无论如何,您可以执行以下操作:

//In GameScene.swift

// var leadVC: LeaderboardTableVC!
var score:Int = 0

func showLeaderboard(){

    let sb = UIStoryboard(name: "Main", bundle: nil)
    guard let leaderBoardVC = sb.instantiateViewController(withIdentifier: "leaderboard") as? LeaderboardTableVC else {
        fatalError("Either couldn't find scene with `leaderboard` identifier, or its base class was not `LeaderboardTableVC`")
    }
    leaderBoardVC.gameScore = score
    self.vc.navigationController?.pushViewController(leaderBoardVC, animated: true)
}

注意,我可能会在gameScore 之前设置gameScore


或者,如果您确实需要此属性,则可以执行以下操作:

//In GameScene.swift
var leadVC: LeaderboardTableVC!
var score: Int = 0

func showLeaderboard() {
    let sb = UIStoryboard(name: "Main", bundle: nil)
    leadVC = sb.instantiateViewController(withIdentifier: "leaderboard")
    leadVC.gameScore = score
    self.vc.navigationController?.pushViewController(leadVC, animated: true)
}

这只是一个问题,为什么您要对这个leadVC保持强烈的引用(例如,当您弹出时,它将保留在内存中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM