2015-10-10 22 views
7

Kompilator generuje błąd, gdy próbuje przypisać nową wartość:Nie można przypisać do niezmiennego wyrażenia typu "Bool?"

Cannot assign to immutable expression of type 'Bool?' 

Mam klasy:

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 
    } 
} 

W źródłowym widoku kontrolera w prepareForSegue:

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

W okolicy kontroler widoku:

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 
    } 
} 

Zadeklarowałem elementy jako Dowolne, ponieważ mogą zawierać [Pozycje] lub [[Pozycje]].

Jak zmienić zmienną selected?

(mam nadzieję, że to nie jest duplikatem pytanie, znalazłem wiele podobnych pytań, ale nie mógł rozwiązać ten problem.)

+0

więc myślę, że muszę zadeklarować 'przedmioty var: [[Produkty]]' . Dzięki matt – Manuel

Odpowiedz

11

(setting.items as! [Setting.Item]) zwraca wartość niezmienną. Nie można wykonywać na nim funkcji mutowania. Co pan może zrobić, jest jednak umieścić go w zmiennej tymczasowej, mutować, że i przypisać go do swojej własności:

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

temporaryVariable[index].selected = false 

setting.items = temporaryVariable 
+0

Dokładnie tego, czego szukałem. Działa idealnie, dzięki – Manuel

Powiązane problemy