swfitでviewcontrollerから操作して配列の要素を変更しているのですが次のview、secoundviewcontrollerで同じ配列の違うindexに同じ操作をしてprintして配列に中身を確認しているのですが一番最初のviewcontrollerで変更したindexが変更前の要素でprintされてしまいます。
同じ配列に指定しているはずなのですが画像のデバック画面を確認していただければ質問の意味を理解していただけると思います。
これは1回目の処理が保存されていないという事なのでしょか?
なかなか調べても納得のいくものが見つからないためどうか皆様のご教授頂ければ幸いです。
class
1class Typevalue { 2 3 var Analyzer = [0,0,0,0,0] 4 5}
viewController
1class ViewController: UIViewController { 2 3 4 var typesCount = Typevalue() 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 } 10 11 12 13 14 @IBAction func button(_ sender: Any) { 15 typesCount.Analyzer[0] = 1 16 print("1回目の処理") 17 print(typesCount.Analyzer) 18 19 } 20 21 @IBAction func button2(_ sender: Any) { 22 typesCount.Analyzer[0] = 2 23 print("1回目の処理") 24 print(typesCount.Analyzer) 25 26 } 27 28 @IBAction func button3(_ sender: Any) { 29 typesCount.Analyzer[0] = 3 30 print("1回目の処理") 31 print(typesCount.Analyzer) 32 33 } 34 35 @IBAction func button4(_ sender: Any) { 36 typesCount.Analyzer[0] = 4 37 print("1回目の処理") 38 print(typesCount.Analyzer) 39 40 } 41 42} 43
SecondViewontroller
1 2import UIKit 3 4class SecondViewController: UIViewController { 5 6 var value2 = Typevalue() 7 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 13 } 14 15 @IBAction func supporter1_1(_ sender: Any) { 16 value2.Analyzer[1] = 1 17 print("2回目の処理") 18 print(value2.Analyzer) 19 } 20 21 @IBAction func supporter1_2(_ sender: Any) { 22 value2.Analyzer[1] = 2 23 print("2回目の処理") 24 25 print(value2.Analyzer) 26 27 } 28 29 @IBAction func supporter1_3(_ sender: Any) { 30 value2.Analyzer[1] = 3 31 print("2回目の処理") 32 33 print(value2.Analyzer) 34 } 35 @IBAction func supporter1_4(_ sender: Any) { 36 value2.Analyzer[1] = 4 37 print("2回目の処理") 38 39 print(value2.Analyzer) 40 } 41 42} 43 44
TypesCount や Analyzer の定義はどうなってますか?
また、コードは画像ではなく markdown 機能を使ってテキストで貼ってもらえると助かります。
https://teratail.com/help/question-tips#questionTips3-5
ご指摘ありがとうございます。
修正致しましたのでどうか宜しくお願いします、またどこか不明瞭な点がございましたら、お手数おかけしますがまたご指摘頂けますと幸いです。
ViewController と SecondViewController がそれぞれ別々の Typevalue を持ってるんですね。
ViewController の button を押した後で SecondViewController の supporter1_1 を押せば、ViewController と SecondViewController が持つ配列は別々なので、次のようになります。
1回目の処理
[1, 0, 0, 0, 0] ← ViewController が持つ typesCount.Analyzer が表示される
2回目の処理
[0, 1, 0, 0, 0] ← SecondViewController が持つ value2.Analyzer が表示される
ありがとうございます。ご指摘いただいた通り、別の変数で宣言していれば別の配列になるのは当然でした。
見直しが甘かったです。staticを使って書き直したら考えた通りに動きました。
理解しやすい説明をしてくださってありがとうございました。
あなたの回答
tips
プレビュー