/ / Jak zaimplementować zmienną tylko do odczytu z mutacją get - swift

Jak zaimplementować tylko do odczytu var z mutacją get - swift

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 № 1

nie 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.