我开始使用 ReactiveCocoa,但我仍在为一些基本概念苦苦挣扎:
- 我的应用开始监听地理位置数据(
init
在我的视图模型中) - 我的应用程序发出带有我当前位置的信号(
didFindCurrentPosition
被调用) - 我的视图控制器显示地图加载(
viewDidLoad
在我的视图控制器中) - 我的视图控制器开始观察当前位置信号(仍然
viewDidLoad
)
我的问题是:完成第 2 步后,如果没有在信号上发送其他事件,我的视图控制器不会收到通知。
我的视图控制器如何访问信号的最后一个值?(即如何在第 3 步访问第 2 步发出的值?)
谢谢你的帮助。
PS:ReactiveCocoa 看起来像一个很棒的库,但我对文档的状态感到困惑。恕我直言,它不是很清楚,并且缺乏一些关于如何使用它的明确指南。
编码
视图模型:
class MyViewModel: LocationManagerDelegate {
let locationManager: LocationManager
let geolocationDataProperty = MutableProperty<Geolocation?>(nil)
let geolocationData: Signal<Geolocation?, NoError>
init() {
geolocationData = geolocationDataProperty.signal
// Location Management
locationManager = LocationManager()
locationManager.delegate = self
locationManager.requestLocation()
}
// MARK: - LocationManagerDelegate
func didFindCurrentPosition(location: CLLocation) {
geolocationDataProperty.value = Geolocation(location: location)
}
}
视图控制器:
class MyViewController: UIViewController {
let viewModel = MyViewModel()
init() {
super.init(nibName: nil, bundle: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
viewModel.geolocationData
.observe(on: UIScheduler())
.observeValues { geolocation in
debugPrint("GOT GEOLOCATION")
}
}
}