Разрешение гонки данных в iOS Swift
У меня есть NetworkProvider, который будет делать вызов API непрерывно, а также, как только я получу данные, я буду обновлять идентификатор пользователя. В то же время я получу доступ к идентификатору пользователя из других функций.
Это условие гонки данных, может кто-то помочь удалить условие.
`
class NetworkProvider {
public var userID: String
func observeStateChange() {
FIRAuth.auth()?.addStateDidChangeListener({ (auth, authenticatedUser) in
if let user = authenticatedUser {
userID = user.uid
}
}
}
func currentUserID() -> String {
return self.userID
}
}`
1 ответ
Использование 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
}
}