我以前使用 RxSwift,但我决定不再使用它,并且能够将所有内容转换为我更熟悉的 Bond。由于 Bond v5 的新变化,我似乎无法弄清楚如何观察 UserDefaults 中的值。以下代码最终给了我一个致命错误。
userDefaults.reactive
.keyPath(LocationManager.HomeLocationKey, ofType: String.self, context: .immediateOnMain)
.map(self.initLocation(from:))
.bind(to: self.homeLocation)
userDefaults
是对 UserDefaults.standard 的引用并且LocationManager.HomeLocationKey
是一个字符串。我提供以下initLocation
功能,因为我知道它会被要求。在该功能下方,我将发布应用程序启动后收到的错误。
func initLocation(from string: String?) -> Location?
{
guard let dataString = string
else { log.warning("Location data did not exist, returning nil"); return nil }
let json = JSON.parse(dataString)
return Location(from: json)
}
错误:
fatal error: Could not convert nil to String. Maybe `dynamic(keyPath:ofExpectedType:)` method might be of help?): file /Users/sam/Documents/iOS Apps/Drizzle/Pods/Bond/Sources/Shared/NSObject+KVO.swift, line 58