L'ajout de l'élément de tableau dans iOS avec Swift

Je suis en train d'ajouter un élément de mon tableau (qui a été déclaré comme un var), à l'aide de quelque chose qui pourrait fonctionner (+=, ajouter, insérer), mais je reçois l'erreur " Immuable valeur de type 'AnyObject[]' a seulement la mutation de membres nommé "ajouter".

Ici est l'endroit où l'erreur se produit:

func testSave(item : NSString, date : NSString){

    itemsArray.append(item) 

MISE À JOUR: VOICI LE CODE COMPLET:

import UIKit
class ToDoListTableViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource, UIAlertViewDelegate {
var itemsArray = NSUserDefaults .standardUserDefaults().arrayForKey("items")
var dateArray = NSUserDefaults .standardUserDefaults().arrayForKey("dates")
override func viewDidLoad() {
super.viewDidLoad()
NSUserDefaults .standardUserDefaults().setObject("test", forKey: "items")
NSUserDefaults .standardUserDefaults().setObject("test", forKey: "dates")
self.itemsArray = NSUserDefaults .standardUserDefaults().arrayForKey("items")
self.dateArray = NSUserDefaults .standardUserDefaults().arrayForKey("dates")
//Uncomment the following line to preserve selection between presentations
        //self.clearsSelectionOnViewWillAppear = false

//Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        //self.navigationItem.rightBarButtonItem = self.editButtonItem
    }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
    }
//#pragma mark - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
//#warning Potentially incomplete method implementation.
        //Return the number of sections.
        return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
//Return the number of rows in the section.
        if itemsArray{
return itemsArray.count}
else{
return 0}
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!{
//variable type is inferred
        /*var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as? UITableViewCell
if !cell {
cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
}
//we know that cell is not empty now so we use ! to force unwrapping
cell!.textLabel.text = self.itemsArray[indexPath.row] as String
cell!.detailTextLabel.text = self.dateArray[indexPath.row] as String
*/
let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier:"Cell")
if itemsArray{
println("Working")
cell.textLabel.text = itemsArray[indexPath.row] as String
cell.detailTextLabel.text = dateArray[indexPath.row] as String
}
return cell
}
@IBAction func addItem(sender : UIBarButtonItem) {
var alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: {(action: UIAlertAction!) in
var stringText = alert.textFields[0].text
var dateText = alert.textFields[0].text
self .testSave(stringText, date: dateText)
}))
alert.addTextFieldWithConfigurationHandler(nil)
self.presentViewController(alert, animated: true, completion: nil)
}
func testSave(item : NSString, date : NSString){
itemsArray.append(item)
/* NSUserDefaults .standardUserDefaults().setObject(item, forKey: "items")
/*    NSUserDefaults .standardUserDefaults().setObject(stringText, forKey: "items")
NSUserDefaults .standardUserDefaults().setObject(dateText, forKey: "dates")
NSUserDefaults.standardUserDefaults().synchronize()
*/
self.dateArray = NSUserDefaults .standardUserDefaults().arrayForKey("dates")
self.tableView .reloadData() */
}
func alertviewClick(){
}
}
À partir de l'erreur, il semble que itemsArray est immuable. Est-il défini avec let ou var?
Il semble que la cause de votre problème se trouve à l'extérieur de code indiqué. Pouvez-vous montrer plus de code, et en particulier comment itemsArray vient dans le champ d'application - est-il un iVar? reçu à partir d'une autre fonction? Déclaré localement?
J'ai mis à jour ma réponse avec le code complet:

OriginalL'auteur Jack Solomon | 2014-06-09