我有NetworkProvider,它将持续进行api调用,一旦我收到数据,我将更新用户ID。同时我将从其他功能访问用户ID。
这是数据竞争条件,有人可以帮助删除条件。
`
13 import numpy as np #math
14
答案 0 :(得分:4)
使用DispatchQueue可以避免数据竞争:
class NetworkProvider {
let isolationQueue = DispatchQueue(label: "com.your.domain.xxx", attributes: .concurrent)
private var _userID: String
public var userID: String {
set { isolationQueue.async(flags: .barrier) { self._userID = newValue } }
get { return isolationQueue.sync { _userID } }
}
func observeStateChange() {
FIRAuth.auth()?.addStateDidChangeListener({ (auth, authenticatedUser) in
if let user = authenticatedUser {
userID = user.uid
}
}
}
func currentUserID() -> String {
return self.userID
}
}