Создание наблюдателей свойств в Swift
Я использую Property Observers
манипулировать пользовательским интерфейсом и объектами, когда значение переменной изменилось. Имея это в виду, мне было интересно, возможно ли создать моих собственных наблюдателей за недвижимостью, таких как didSet
а также willSet
для моих собственных объектов. я ищу возможность написать что-то вроде этого:
var someArray: [String] {
newElementAdded { *some code here* }
}
Как Вам известно didSet
а также willSet
не отслеживать, например, добавление элемента в массив, но, тем не менее, отслеживать изменения всего значения массива. Я с нетерпением жду, возможно, расширить это с помощью наблюдателей за недвижимостью. Я просмотрел документацию о замыканиях и свойствах и не смог найти никаких подсказок.
У меня вопрос, как я могу создать наблюдателей за недвижимостью? В качестве примера я привел один из приведенных выше вариантов использования, но я стремлюсь создать собственных наблюдателей.
1 ответ
Наблюдателей за имуществом более чем достаточно. Вы можете использовать что-то вроде этого:
var someArray: [String] = [] {
didSet {
stride(from: someArray.count, to: oldValue.count, by: 1).map {
print("This index doesn't exist anymore:", $0)
}
stride(from: 0, to: min(oldValue.count, someArray.count), by: 1)
.filter { oldValue[$0] != someArray[$0] }
.forEach { print("The element at index", $0, "has a new value \"\(someArray[$0])\"") }
stride(from: oldValue.count, to: someArray.count, by: 1).map {
print("New value \"\(someArray[$0])\" in this index", $0)
}
}
}
someArray.append("Hello")
//New value "Hello" in this index 0
someArray.append("world")
//New value "world" in this index 1
someArray = ["Hello", "world"]
//Nothing is printed since no elements have changed
someArray.append("!")
//New value "!" in this index 2
someArray.remove(at: 1)
//This index doesn't exist anymore: 2
//The element at index 1 has a new value "!"
someArray.append(contentsOf: ["✋", ""])
//New value "✋" in this index 2
//New value "" in this index 3