Czy jest jakiś sposób automatycznego wygenerowania pary funkcji getter/setter dla właściwości klasy w Swift? Coś wzdłuż linii obiektywu w Haskell.Obiektywy w obiektach Swift
Byłem w stanie zrobić to ręcznie, co następuje:
class PropertyLens<U, T> {
let getter: U -> T
let setter: (U, T) ->()
init(getter: (U -> T), setter: ((U, T) ->())) {
self.getter = getter
self.setter = setter
}
func get(u: U) -> T {
return getter(u)
}
func set(u: U, t: T) {
setter(u, t)
}
}
// ...
let myPropertyLens = PropertyLens<MyClass, Int>(getter: { $0.myProperty }, setter: { $0.myProperty = $1 })
jednak, że staje się gadatliwy, żmudne i bardziej podatne na błędy niż chciałbym. Czy brakuje wbudowanej funkcji?
Jaki jest twój cel? O ile je rozumiem, soczewki w Haskell zostały zaprojektowane, aby umożliwić zmianę stanu, który Swift obejmuje już. Pomiędzy programami 'willSet' i' didSet' i właściwościami obliczonymi istnieje duża elastyczność. –
Moim celem jest przeniesienie tego obiektywu na inny obiekt w celu manipulowania właściwościami. W moim bieżącym projekcie jest to obiekt, który generuje komórki widoku tabeli i reaguje na prasy w standardowy sposób. Obiektywy w Haskell nie dotyczą tak zmiennego stanu, jak tylko dostarczają kompozycyjnego sposobu na zapytanie i manipulowanie strukturami danych, choć powstaje z nich iluzja zmienności. –
Metoda ObjC będzie po prostu przekazywać ciąg klawiszy, ale nie masz typu bezpieczeństwa –