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

问题描述:

我试图追加一个新的Store对象到我的用户结构中的我的商店数组...我添加了一个变异的func追加到我的结构,但我仍然失去了一些东西,因为我仍然得到不可变的值类型[字符串]只有变异的成员名为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) 
      } 
     } 
    } 



} 
+0

Im sorry:selectedUser.stores.append(store!) – GarySabo

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正确,我们没有嵌套不必要的水平,我们不必强制解开任何东西(导致崩溃)。

+0

谢谢!我从来没有见过这种语法:如果让store = store,selectedIndex = addStoreViewController.index换句话说,逗号让你检查多个值? – GarySabo

试试这个

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

附加功能属于结构的用户,而不是user.stores

我假设selectedUser是一让,但你是变异它,使它成为一个变种,如果你打算变异它。

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