2017-11-20 9 views
0

オプションの配列に値を追加しようとしています。
空の配列がviewWillAppearで
配列自体がクリアされ続ける

var correctCards: [Int]? = nil 

に従っているため私のコード私は私のコードを実行すると、私は[4]配列内にあることを確認することができます

let matchedIndex = (numbers.index(of: attackNumber) as! Int) 

if correctCards == nil { 
    correctCards = [] 
} 

if matchedIndex == 4 { 
    correctCards!.append(matchedIndex) 
} else if matchedIndex ==5 { 
    correctCards!.append(matchedIndex) 
} else if and so on... 

を持っています。しかし、私は別のviewcontrollerに移動し、このviewcontrollerに戻ってくると、その値は新しいmatchedIndex [5]に置き換えられます。アレイを[4,5]のように構築したいです。私のコードの問題は何ですか?

+0

:データを追加する場合

class DataManager: NSObject { static let sharedManager = DataManager() var correctCards : [Int] = [] } 

、あなたは以下のようなものを追加することができます。 – Sulthan

+0

こんにちは私はあなたのコメントを取得しません。コントローラを変更するときにリセットしないでください。私はそれらをリセットしていません.. – Satsuki

+1

どのように 'このviewcontroller'に戻ってくるのですか?最初のコントローラの新しいインスタンスを作成しているように聞こえます – Russell

答えて

1

あなたが共有インスタンスの配列を維持する必要があります。その後、変数のスコープのみが割り当て解除されません。あなたのcontollers外のデータモデルを維持し、contillersを変更するときにそれをリセットいけない

DataManager.sharedManager.correctCards.append(matchedIndex) 
+0

ありがとうございました。それはまだそれ自身をリセットします.. – Satsuki

+1

NSObjectから継承は無意味です –

0

は、(代わりにviewWillAppearの)viewDidLoad内にコードを移動しよう:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let matchedIndex = (numbers.index(of: attackNumber) as! Int) 
    if correctCards == nil { 
    correctCards = [] 
    } 

    if matchedIndex == 4 { 
    correctCards!.append(matchedIndex) 
    } else if matchedIndex ==5 { 
    correctCards!.append(matchedIndex) 
    } else if and so on... 
} 
+0

これは動作しません - 全体あなたが最初のコントローラに戻るたびにビルドすることを意味しています - これは単一のエントリだけを追加します – Russell

+1

@Russellこれは動作します。なぜなら、新しいvcを表示するときにviewcontrollerがdeinitでなく、viewDidLoad提示されたVCから戻って、viewWillAppearは、まだ、彼がこの1つを却下した場合、値が失われる、最も安全な方法はまだそれをシングルトンにするか、別のクラスに移動する – Tj3n

関連する問題