不可变的值类型[字符串]只有变异的成员名为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)
}
}
}
}
答
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 = ...
Im sorry:selectedUser.stores.append(store!) – GarySabo