2017-01-15 11 views
0

ユーザーデフォルトを使用して、ラベルfoxmillにハイスコアを保存します。明らかに新しいハイスコアがあれば、私はそれを置き換えたいと思っています。問題はtotalTime(スコアを追跡するもの)がintではなくdoubleであることです。すべてのチュートリアルでは、ハイスコアのチュートリアルでintを使用しています。は、倍数をハイスコアとして保存するユーザー定義を作成する必要があります(swift3)

import UIKit 
class winViewController: UIViewController { 

@IBOutlet var score2: UILabel! 
@IBOutlet var winningLabel: UILabel! 


    @IBOutlet var foxMill: UILabel! 


    @IBOutlet var hhighscore: UILabel! 
    public var LebelText: String? 
    public var LebelText2: String? 
    public var LebelText3: String? 
    public var LebelText4: String? 



override func viewDidLoad() { 
    super.viewDidLoad() 
       timeCalculation() 
    loadState() 



      } 
    func saveScore(score: Double) { 

     // Instantiate user defaults 
     let userDefaults:UserDefaults = UserDefaults.standard 

     // Set your score 
     userDefaults.set(score, forKey: "highScore") 

     // Sync user defaults 
     userDefaults.synchronize() 

    } 

    func loadState() { 
     let userDefaults = UserDefaults.standard 
     let score = userDefaults.double(forKey: "highScore") 
     foxMill.text = "High Score: \(score)" 
    } 
      func timeCalculation(){ 

     guard let unwrapedText = self.LebelText2 else { 
      return 
     } 

     guard let unwrapedText2 = self.LebelText else { 
       return 
     } 
     guard let unwrapedText3 = self.LebelText3 else { 
      return 
     } 
     guard let unwrapedText4 = self.LebelText4 else { 
      return 
     } 

     if let myInt = Double(unwrapedText), let myInt2 = Double(unwrapedText2), let myInt3 = Double(unwrapedText3), let myInt4 = Double(unwrapedText4) 


     { 
      var totalTime = myInt + myInt2 + myInt3 + myInt4 
      self.winningLabel.text = "You won"+"\n"+"Reaction time :" + String(totalTime) + " Seconds" 
      saveScore(score: totalTime) 

       }}} 

答えて

0

あなたはちょうどあなたがそれを取得するときに、Doubleとしてそうすることを確認し、適切なキーと値を保存します。

func saveScore(score: Double) { 

    // Instantiate user defaults 
    let userDefaults:UserDefaults = UserDefaults.standard 

    // Set your score 
    userDefaults.set(score, forKey: "highScore") 

    // Sync user defaults 
    userDefaults.synchronize() 

} 

今、あなたはあなたのスコア値を更新するとき、あなたが言うとき、 ...(unwrappedText)、あなたがスコアをロードするためにあなたは、あなたのアプリケーションをロードするユーザデフォルト今

if let myInt = Double(unwrapedText), let myInt2 = Double(unwrapedText2), let myInt3 = Double(unwrapedText3), let myInt4 = Double(unwrapedText4) 

    // HERE you do whatever it was you originally did with the text, but also save a value 

    saveScore(score: myInt) 

{ 

次回保存するには:

func loadScore() { 
    // Instantiate User Defaults 
    let userDefaults = UserDefaults.standard 
    let score = userDefaults.double(forKey: "highScore") 
} 

あなたはそれがDoubleなくInteger

になりたいときは、本当にあなたのfoxMillラベルは、ロード時にこのハイスコアを表示したい場合は、あなたがしたいプロパティ「ミン」という名前を付けるべきではありません2つのことをする。まず、UserDefaultsを同期させて状態を保存してから、にapplicationDidEnterBackgroundapplicationWillTerminateのようなメソッドを調べることがアプリを閉じる前に確認してください。今のところ私は上記のsaveScore(score:)関数を呼び出して、アプリケーションが終了した最後の状態を適切に保存したと仮定します。だから、あなたのスコアを取得し、ロード時にあなたのfoxMillラベルを更新したいと思っています。

上記のloadScore方法を修正することによって、このような何かを行うことができます:

viewDidLoadの終わりに
func loadScore() { 
    // Instantiate User Defaults 
    let userDefaults = UserDefaults.standard 
    let score = userDefaults.double(forKey: "highScore") 
    foxMill.text = "High Score: \(score)" 
} 

そして:

override func viewDidLoad() { 
    super.viewDidLoad() 

    loadScore() 
} 

それとも可能性がありますが、このような何かをするだろうラベルのテキストに割り当てる文字列を返すようにメソッドを変更します。

func loadScore() -> String { 
    // Instantiate User Defaults 
    let userDefaults = UserDefaults.standard 
    let score = userDefaults.double(forKey: "highScore") 
    return "High Score: \(score)" 
} 
で次に

私はこれで私のラベルfoxmillを使用する方法
override func viewDidLoad() { 
    super.viewDidLoad() 

    foxMill.text = loadScore() 
} 
+0

? –

+0

@joemax - あなたが何を求めているのか分かりません。あなたは 'User Defaults'を使ってハイスコアを' Double'として保存したいのですが、それはあなたの 'UILabel'と何が関係していますか? – Pierce

+0

viewdidloadには何を入れますか? –

関連する問題