bugfix> swift > 投稿

アプリのユーティリティファイルにユーザーのデフォルトを設定し、必要なビューコントローラーでそれらを呼び出します。今日のウィジェットは次のとおりです。

import UIKit
import NotificationCenter
class TodayViewController: UIViewController, NCWidgetProviding {
@IBOutlet weak var BitCount: UILabel!
@IBOutlet weak var upCost: UILabel!
var Bits:Double = defualts.double(forKey: "bits")
var bitsPerClick:Double = defualts.double(forKey: "bitsPerClick")
var upgradePrice:Double =  defualts.double(forKey: "upgradeCost")
//Click bit
@IBAction func Click(_ sender: Any) {
    AppUtility().bitClick()
    BitCount.text = "\(Bits)"
}
//Click Upgrade
@IBAction func Upgrade(_ sender: Any) {
    AppUtility().upgradeClick()
        upCost.text = "Cost \(upgradePrice)"
        BitCount.text = "\(Bits)"
}

アプリユーティリティは次のとおりです。

import Foundation
import UIKit
let defualts = UserDefaults.standard
var Bits:Double = defualts.double(forKey: "bits")
var bitsPerClick:Double = defualts.double(forKey: "bitsPerClick")
var upgradePrice:Double =  defualts.double(forKey: "upgradeCost")
class AppUtility: UIViewController {
public func setDefualts() {
defualts.set(0, forKey: "bits")
defualts.set(1, forKey: "bitsPerClick")
defualts.set(10, forKey: "upgradeCost")
}
public func upgradeClick() {
    if Bits >= upgradePrice {
        Bits = Bits - upgradePrice
        bitsPerClick = bitsPerClick + 1
        upgradePrice = upgradePrice * 1.5
    }
}
public func bitClick() {
    Bits = Bits + bitsPerClick
}
}

コードを実行すると、すべてのラベルが空白で表示されるため、ユーザーのデフォルトが設定されていないか、適切に呼び出されていないと想定しています

回答 2 件
  • 値を整数として保存しますが、倍精度として読み取ります。

    変化する

    defualts.set(1, forKey: "bitsPerClick")
    
    

    defualts.set(1.0, forKey: "bitsPerClick")
    
    

    または 整数として読む

    var bitsPerClick:Int = defualts.integer(forKey: "bitsPerClick")
    
    

  • これを試して

    /// Global Struct
    struct globalValues {
        static var firstValue : String?
        static var secondValue : String?
    }
    /// Set Value
    globalValues.firstValue = "1"
    globalValues.secondValue = "2"
    /// Get Values
    print(globalValues.firstValue ?? "")
    print(globalValues.secondValue ?? "")
    /// When App is closed Struct will be cleared
    /// Save Data for reference in UserDefaults
    /// Now in App Delegate which is called for
    /// first time Just Assign
    /// Userdefaults values to Struct
    /// So you can use it -- like
    globalValues.firstValue = UserDefaults.standard.value(forKey: "firstValue") as? String
    globalValues.secondValue = UserDefaults.standard.value(forKey: "secondValue") as? String
    
    

    したがって、あるクラスから別のクラスに何かを渡す必要はありません。これにより、時間とある程度のコード(コンパイル時間)を節約できます。

あなたの答え