前提・実現したいこと
ゲームを作成しています
持っているアイテムの数をUserDefaultsに保存させたいのですが、
そのアイテムの数を保存しているのは配列で、ネットで調べて出てきた配列をUserDefaultsに保存する方法を試してもうまくいかなかったので、詳しい方に教えていただきたいです...
発生している問題・エラーメッセージ
配列にアイテムの数を追加するプログラム
swift
1UserDefaults.standard.set(self.udMyItemArray, forKey: "udMyItemArray") 2udMyItemNum[Deathblow] = udMyItemNum[Deathblow] + 1
エラー
Value of type 'UserDefaults' has no subscripts
UserDefaultsに配列を保存するプログラム
swift
1UserDefaults.set(udMyItemNumArray, forKey: "udMyItemNumArray")
エラー
Instance member 'set' cannot be used on type 'UserDefaults'; did you mean to use a value of this type instead?
該当のソースコード
swift
1import UIKit 2 3class ViewControllerShop: UIViewController { 4 @IBOutlet weak var imageDB: UIImageView! 5 @IBOutlet weak var PointLabel: UILabel! 6 @IBOutlet weak var LeftArrow: UIImageView! 7 @IBOutlet weak var RightArrow: UIImageView! 8 @IBOutlet weak var LetterLabel: UILabel! 9 @IBOutlet weak var DBTitleLabel: UILabel! 10 11 var udPoint = UserDefaults.standard 12 var udMyItem = UserDefaults.standard 13 var udMyItemArray: [String] = [] 14 var udMyItemNum = UserDefaults.standard 15 var udMyItemNumArray: [Int] = [0,0,0,0,0,0,0,0,0,0,0] 16 17 var timerLeftArrow:Timer! 18 var timerRightArrow:Timer! 19 var DBTitleArray: [String] = ["カミナリ","瞬足5","瞬足10","瞬足15","透明5","透明10","透明15","攻撃力上昇","防御","鈍足のカミナリ","豪速球"] 20 var DBImageArray: [String] = ["Thunder","Speed5","Speed10","Speed15","Invisible5","Invisible10","Invisible15","ATKRise","Shield","Electrical","BallSpeed"] 21 var DBLetterArray: [String] = ["ランダムで、敵のライフを1減らす\n150 PT","5秒間、足が速くなる\n100 PT","10秒間、足が速くなる\n150 PT","15秒間、足が速くなる\n200 PT","5秒間、透明になる\n150 PT","10秒間、透明になる\n250 PT","15秒間、透明になる\n350 PT","一回だけボールの攻撃力がUP\n200 PT","一回だけボールを防げる\n200 PT","ランダムで、敵の足を遅くする\n100 PT","一回だけボールのスピードがUP\n100 PT"] 22 var DBCostArray: [Int] = [150,100,150,200,150,250,350,200,200,100,100] 23 var Deathblow = 0 24 var getPointUD = 0 25 var getPoint2 = 0 26 27 override func viewDidLoad() { 28 super.viewDidLoad() 29 30 getPointUD = getPoint2 + udPoint.integer(forKey: "DataGetPoint") 31 LoadData() 32 33 timerLeftArrow = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false, block:{ (t) in 34 UIView.animate(withDuration: 0.8, delay: 0.0, options: [.curveEaseIn, .repeat/*,.autoreverse*/], animations: { 35 self.LeftArrow.center.x -= 10.0 36 }) { _ in 37 //self.LeftArrow.center.x += 10.0 38 } 39 }) 40 41 timerRightArrow = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false, block:{ (t) in 42 UIView.animate(withDuration: 0.8, delay: 0.0, options: [.curveEaseIn, .repeat/*,.autoreverse*/], animations: { 43 self.RightArrow.center.x += 10.0 44 }) { _ in 45 //self.LeftArrow.center.x += 10.0 46 } 47 }) 48 } 49 50 @IBAction func RightSwiped(_ sender: UISwipeGestureRecognizer) { 51 if Deathblow == 0 { 52 Deathblow = 11 53 } 54 Deathblow = Deathblow - 1 55 print(DBImageArray[Deathblow]) 56 print(Deathblow) 57 imageDB.image = UIImage(named: String(DBImageArray[Deathblow]) + ".png") 58 LetterLabel.text = String(DBLetterArray[Deathblow]) 59 DBTitleLabel.text = String(DBTitleArray[Deathblow]) 60 //print(DeathblowArray[0].components(separatedBy: "_")) 61 } 62 63 @IBAction func leftSwiped(_ sender: UISwipeGestureRecognizer) { 64 Deathblow = Deathblow + 1 65 if Deathblow == 11 { 66 Deathblow = 0 67 } 68 print(DBImageArray[Deathblow]) 69 print(Deathblow) 70 imageDB.image = UIImage(named:String(DBImageArray[Deathblow]) + ".png") 71 LetterLabel.text = String(DBLetterArray[Deathblow]) 72 DBTitleLabel.text = String(DBTitleArray[Deathblow]) 73 } 74 75 @IBAction func BuyButton(_ sender: Any) { 76 let alert: UIAlertController = UIAlertController(title: "TA・SU・KE", message: "本当に購入しますか?", preferredStyle: UIAlertController.Style.alert) 77 78 let defaultAction: UIAlertAction = UIAlertAction(title: "購入", style: UIAlertAction.Style.default, handler:{ 79 // ボタンが押された時の処理を書く(クロージャ実装) 80 (action: UIAlertAction!) -> Void in 81 //ここに購入ボタンを押した時のプログラムを書く 82 print("購入") 83 self.getPointUD = self.getPointUD - self.DBCostArray[self.Deathblow] 84 self.LoadData() 85 UserDefaults.standard.set(self.udMyItemArray, forKey: "udMyItemArray") 86 udMyItemNum[Deathblow] = udMyItemNum[Deathblow] + 1 87 self.BuyAlert() 88 }) 89 90 let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{ 91 // ボタンが押された時の処理を書く(クロージャ実装) 92 (action: UIAlertAction!) -> Void in 93 print("キャンセル") 94 }) 95 96 // ③ UIAlertControllerにActionを追加 97 alert.addAction(cancelAction) 98 alert.addAction(defaultAction) 99 100 // ④ Alertを表示 101 present(alert, animated: true, completion: nil) 102 } 103 104 func BuyAlert() { 105 // アラートを作成 106 let alert = UIAlertController( 107 title: "TA・SU・KE", 108 message: String(DBImageArray[Deathblow]) + "を購入しました", 109 preferredStyle: .alert) 110 111 // アラートにボタンをつける 112 alert.addAction(UIAlertAction(title: "OK", style: .default)) 113 114 // アラート表示 115 self.present(alert, animated: true, completion: nil) 116 } 117 118 func LoadData() { 119 UserDefaults.standard.set(getPointUD, forKey: "DataGetPoint") 120 PointLabel.text = String(getPointUD) + " PT" 121 UserDefaults.set(udMyItemNumArray, forKey: "udMyItemNumArray") 122 123 } 124 125 126 127 128} 129
どこを乗せればいいのかわからず全て載せました
わかりづらくてごめんなさい
試したこと
https://qiita.com/k_eita/items/d36b4cffd9fc6e133c70
https://teratail.com/questions/116214
を参考にした。
補足情報(FW/ツールのバージョンなど)
XcodeVersion 11.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/10 11:16
2020/01/10 11:16
2020/01/10 11:17
2020/01/10 11:46
2020/01/10 11:46
2020/01/11 01:10
2020/01/11 01:10
2020/01/11 01:12
2020/01/11 08:24
2020/01/13 01:18