, , @dan , , , :
get { return _getNewState(UIState<[T]>) }
, , ? , _getNewState () -> UIState<[T]> :
get { return _getNewState() }
, getNewState setNewState(_:) , state - , erasure init:
_getNewState = { models.state }
_setNewState = { models.state = $0 }
( , models, . Closures: Capturing Values )
, , UIState<T>, UIState<[T]> , T , .Success ( 2D-).
, , , :
enum UIState<T> {
case Loading
case Success([T])
case Failure(ErrorType)
}
protocol ModelsDelegate: class {
associatedtype Model
var state: UIState<Model> { get set }
}
class AnyModelsDelegate<T>: ModelsDelegate {
var state: UIState<T> {
get { return _getNewState() }
set { _setNewState(newValue) }
}
private let _getNewState: () -> UIState<T>
private let _setNewState: (UIState<T>) -> Void
required init<U: ModelsDelegate where U.Model == T>(_ models: U) {
_getNewState = { models.state }
_setNewState = { models.state = $0 }
}
}