Mam var
var soketTasksList:Set<SocketTask> {
get { return socketManager.tasksList }
}
Nie muszę ustawiać, tylko dostaję, ale muszę zrobić coś takiego
soketTasksList.remove(task)
ale kompilator mówi
Nie można użyć mutacji elementu członkowskiego na niezmiennej wartości jest właściwością tylko do pobierania
Próbowałem dodać słowo kluczowe „mutacja” do get, ale to nie działa próbował dodać "mutację" do zmiennej, ale to też nie działa.
UPD nie rozumiem, dlaczego potrzebuję zestawu? Jeśli zrobię
func getSoketTasksList() -> Set<CXSocketTask> {
return socketManager.tasksList
}
mogę
getSoketTasksList().remove(task)
dlaczego nie z var?
Odpowiedzi:
3 dla odpowiedzi № 1nie muszę ustawiać, tylko dostać
Tak ty zrobić trzeba ustawić.
Muszę zrobić coś takiego
soketTasksList.remove(task)
To jest mutacja. Mutowanie typ wartości, taki jak Set wymaga umiejętności ustawiania. Ale odciąłeś tę możliwość, ustawiając tę zmienną obliczeniową tylko do odczytu.
UPD Nie rozumiem, dlaczego potrzebuję zestawu? Jeśli zrobię
func getSoketTasksList() -> Set<CXSocketTask> { return socketManager.tasksList }
mogę
getSoketTasksList().remove(task)
Nie, nie możesz. Spróbuj. Oto test placu zabaw:
class CXSocketTask:NSObject{}
class SocketManager {
var tasksList = Set<CXSocketTask>()
}
let task = CXSocketTask()
let socketManager = SocketManager()
socketManager.tasksList.insert(task)
func getSoketTasksList() -> Set<CXSocketTask> {
return socketManager.tasksList
}
getSoketTasksList().remove(task)
Ostatnia linia generuje błąd: „nie można użyć mutacji składowej na niezmiennej wartości:„ getSoketTasksList ”zwraca niezmienną wartość”.
0 dla odpowiedzi nr 2
W tym celu możesz użyć zmiennej tymczasowej:
var list = soketTasksList
list.remove(task)
Zwróć uwagę, że lista bazowa (socketManager.tasksList
w tym przypadku) pozostaje nietknięty.