簡體   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