2015-10-10 19 views
7

Der Compiler führt den Fehler, wenn Sie einen neuen Wert zuweisen versuchen:Kann nicht zu unveränderlichen Ausdruck des Typs 'Bool?'

Cannot assign to immutable expression of type 'Bool?' 

ich eine Klasse haben:

class Setting { 
    struct Item { 
     var text: String 
     var selected: Bool? 

     init(withText text: String) { 
     self.text = text 
     self.selected = nil 
     } 

    var items: Any 

    init(items:Any) { 
     self.items = items 
    } 
} 

Im Quelle-View-Controller in prepareForSegue:

let item = Setting.Item(withText: user.description) 
let setting = Setting(items: [item]) 
destinationViewController.setting = setting 

Im Ziel View-Controller:

class DestinationViewController: UITableViewController { 
    var setting: Setting! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     //this works 
     _ = (setting.items as! [Setting.Item])[index].selected 

     // this throws the error 
     (setting.items as! [Setting.Item])[index].selected = false 
    } 
} 

Ich habe Artikel als Beliebige deklariert, da sie entweder [Artikel] oder [Artikel] enthalten können.

Wie kann ich die Variable selected veränderbar machen?

(Ich hoffe, das kein Duplikat Frage ist, dass ich viele ähnliche Fragen gefunden, aber diese nicht lösen konnte.)

+0

Also muß ich glaube, ich 'var Artikel erklären: [[Artikel]]' . Danke matt – Manuel

Antwort

11

(setting.items as! [Setting.Item]) gibt einen unveränderlichen Wert. Sie können keine Mutationsfunktionen darauf ausführen. Was können Sie tun, ist es jedoch in einer temporären Variablen gesetzt werden, mutieren, dass, und es zurück zu Ihrem Objekt zuweisen:

var temporaryVariable = (setting.items as! [Setting.Item]) 

temporaryVariable[index].selected = false 

setting.items = temporaryVariable 
+0

Genau das, was ich gesucht habe. Funktioniert perfekt, Danke – Manuel

Verwandte Themen