0

演習として、次のようなモデルを作成しました。

struct Store {
    var name : String
    var bills : Array<Bill>
    var category : Category?
}

struct Bill {
    var date : String
    var amount : Float
}

struct Category {
    var name : String
    var tags : Array<String>
}

新しいストアを作成するのではなく、請求書を追加するためにストアが既に存在するかどうかを検索しているときに、コードが機能しません。検索の結果が Array 要素のコピーであるかのように動作します。参考にさせていただきたいと思います。

var stores : Array <Store> = Array()
for billStatment in billStatements! {
    let billParts = billStatment.split(separator: ",")
    if billParts.count > 0 {
        let bill : Bill = Bill(date:String(billParts[0]), amount: Float(billParts[2])!)
        var store : Store = Store(name:String(billParts[1]), bills: [bill], category: nil)


        if var alreadyAddedStore = stores.first(where: {$0.name == String(billParts[1])}) {
            alreadyAddedStore.bills.append(bill)
            print("yeah found it \(alreadyAddedStore)") // the debugger breaks here so I know the "first" method is working. If I print alreadyAddedStore here I have one more element, that's fine.
        } else {
            stores.append(store)
        }

    }
}

 print("\(stores.count)") // If I break here for a given store that should contains multiple elements, I will see only the first one added in the else statement.

誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1