Firebase 데이터베이스는 여러분이 성취하려는 것을 위해 정말 멋지다. 사실, KVO는 Objective-C에서 작동하는 것과 똑같은 NSObject에서 상속 된 클래스에서 작동합니다. 그럼에도 불구하고보기 컨트롤러를 업데이트 할 수있는 다른 옵션이 많이 있습니다.
첫 번째는 콜백을 사용하는 것입니다.
매우 유익한 방법입니다. 데이터베이스가 업데이트 될 때마다 서비스 계층에 저장된 콜백을 호출 할 수 있습니다. 뷰 컨트롤러는 서비스 계층에 콜백을 설정합니다.
이
서비스 층 :
let serviceLayer = ServiceLayer()
serviceLayer.callback = { model in
label.text = model.name
//Update or do whatever you want with the model
}
: 당신이 serviceLayer 또는 이와 유사한의 인스턴스가있는 경우
class ServiceLayer {
var callback: ((Model) ->())!
func listenForUpdates() {
let ref = FIRDatabase.database().reference(withPath: "path")
ref.observe(FIRDataEventType.value, with: { snapshot in
guard let modelList = snapshot.value as? [String : AnyObject], let model = modelList["key"] as? Model else {
return
}
callback(model)
})
}
그리고 당신의 뷰 컨트롤러에서
, 당신은 다음을 수행 할 수 있습니다 예를 들어
두 번째 방법은 내가 가장 좋아하는 방법이며 Rx를 사용하는 것입니다.
신속한 리 액티브 프로그래밍 (RxSwift)을위한 기본 라이브러리이며 더 많은 옵션을 제공합니다. 처음에는 그립을 잡는 것이 꽤 어렵지만, 그만한 가치가 있습니다.
func listenForChanges() -> Observable<Model> {
return Observable.create { subscriber in
let ref = FIRDatabase.database().reference(withPath: "path")
ref.observe(FIRDataEventType.value, with: { snapshot in
guard let modelList = snapshot.value as? [String : AnyObject], let model = modelList["key"] as? Model else {
return
}
subscriber.onNext(model)
})
return Disposables.create()
}
}
그리고 뷰 컨트롤러에서 : 수신으로 수행
위의 예는 다음과 같은 것
let disposeBag = DisposeBag()
let serviceLayer = ServiceLayer()
serviceLayer.listenForChanges()
.do(
onNext: { [weak self] model in
label.text = model.name
}
)
.subscribe()
.addDisposableTo(disposeBag)
의 차이는 여기에 너무 악명 아니지만, 수신은 새로운 패러다임을 제공하는 신속하게 정말 유용합니다.
Rx에 대한 자세한 내용을 보려면 http://reactivex.io/