2015-06-20 37 views
0

我試圖追加一個新的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

回答

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正確,我們沒有嵌套不必要的水平,我們不必強制解開任何東西(導致崩潰)。

+0

謝謝!我從來沒有見過這種語法:如果讓store = store,selectedIndex = addStoreViewController.index換句話說,逗號讓你檢查多個值? – GarySabo

2

試試這個

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

附加功能屬於結構的用戶,而不是user.stores

0

我假設selectedUser是一讓,但你是變異它,使它成爲一個變種,如果你打算變異它。

let selectedUser = ... 
// Should be 
var selectedUser = ... 
相關問題