不可变值类型[string]只有名为append的变异成员

时间:2015-06-20 00:24:39

标签: ios swift struct

我正在尝试将一个新的Store对象追加到我的User结构中的stores数组中...我添加了一个变异函数追加到我的Struct但是我仍然遗漏了一些东西,因为我仍然得到了

  

不可变值类型[Store]只有名为'append'的变异成员

错误

import Foundation

import UIKit

struct User {
    var name: String
    var stores: [Store]



    mutating func append(newStore: Store) {
        stores.append(newStore)
    }
}

extension User: Printable {
    var description: String {
        var printedName = ("\(name as String, stores as [Store])")
        return printedName
    }
}

struct Store {
    var name: String
    var data: [[String: String]]



}

extension Store: Printable {
    var description: String {
        var printedStores = ("\(name as String, data as [[String : String]])")
        return printedStores
}
}

 @IBAction func done(segue: UIStoryboardSegue) {
        let addStoreViewController = segue.sourceViewController as! AddStoreViewController
        let store = addStoreViewController.store
        if let selectedIndex = addStoreViewController.index {
            stores[selectedIndex] = store!
        } else {
            if let selectedUser = user {
                selectedUser.stores.append(store!)
            }
        }
        storeTableView.reloadData()
    }

import UIKit

class AddStoreViewController: UIViewController {


    var store: Store?
    var index: Int?

    @IBOutlet weak var storeTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        if let name = store?.name {
            storeTextField?.text = name
        }

        // Do any additional setup after loading the view.
    }





    // MARK: - Navigation


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let name = storeTextField?.text
        if segue.identifier == "addAction" {
            if var store = store {
                self.store?.name = name!
            } else {
                store = Store(name: name!, data: [["": ""]])
                println(store) 
            }
        }
    }



}

3 个答案:

答案 0 :(得分:2)

试试这个

if var selectedUser = user {
    selectedUser.append(store!)
}

append函数属于struct user,而不是user.stores

答案 1 :(得分:1)

if let selectedIndex = addStoreViewController.index {
    stores[selectedIndex] = store!
} else {
    if let selectedUser = user {
        selectedUser.stores.append(store!)
    }
}

这似乎是问题部分。

我们可以同时修复您的问题稍微清理您的else代码:

if let store = store, selectedIndex = addStoreViewController.index {
    stores[selectedIndex] = store
} else if let store = store, var selectedUser = user {
    selectedUser.append(store)
}

我们能够append正确,我们没有不必要的嵌套水平,我们也不必强行打开任何东西(这会导致崩溃)。< / p>

答案 2 :(得分:0)

我假设selectedUser是一个let,但你正在改变它,如果你计划改变它就把它变成var。

let selectedUser = ...
// Should be
var selectedUser = ...