gpt4 book ai didi

Swift 5.1 组合可观察/环境变量在 didSet 时未更新

转载 作者:行者123 更新时间:2023-11-30 10:29:20 24 4
gpt4 key购买 nike

我试图找出为什么我的session没有更新,尽管didSet触发并可能更新User

我已经从代码片段中删除了多余的注释和样式,但这就是我目前正在尝试的。

//  SessionStore.swift

class User {
var uid: String
var phoneNumber: String
init(uid: String, phoneNumber: String) {
self.uid = uid
self.phoneNumber = phoneNumber
}

}
class SessionStore : ObservableObject {
var didChange = PassthroughSubject<SessionStore, Never>()
var session: User? { didSet { self.didChange.send(self); print("didSet()") }}
var handle: AuthStateDidChangeListenerHandle?
func listen () {
// monitor authentication changes using firebase
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
self.session = User(
uid: user.uid,
phoneNumber: ""
)
} else {
self.session = nil
}
}
}
func register(
phoneNumber: String,
handler: @escaping AuthDataResultCallback
){

PhoneAuthProvider.provider(auth: Auth.auth())
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in
if let error = error {
return
}
UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
let verificationCode = "123456"
let credential = PhoneAuthProvider.provider().credential(
withVerificationID: verificationID!,
verificationCode: verificationCode
)
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
print(error)
return
}
self.listen()
return
}

}
}
}

struct Login: View {
@EnvironmentObject var session: SessionStore
@State var phoneNumber: String = ""
@State var loading = false
@State var error = false
func getUser () {
session.listen()
}
var body: some View {
Group {
// If the user is logged in
if(session.session != nil) {
Score()
// If the user is NOT logged in
} else {
VStack {
Text("Register!")
TextField("Phone Number", text: $phoneNumber)
MyButton(...).gesture(TapGesture().onEnded {
self.session.register(
phoneNumber: self.phoneNumber
){
(result, error) in
if(error != nil) {
self.error = true
} else {
self.phoneNumber = ""
self.getUser()
}
})
}
}
}
}.onAppear(perform: getUser)
}
}

最佳答案

Scratchy(仅基于您的快照)...

而不是这个

class SessionStore : ObservableObject {
var didChange = PassthroughSubject<SessionStore, Never>()
var session: User? { didSet { self.didChange.send(self); print("didSet()") }}

用这个

class SessionStore : ObservableObject {
@Published var session: User?

据我从快照中看到,不需要更多的更改,可能是其他部分中的某种类型对齐。

关于Swift 5.1 组合可观察/环境变量在 didSet 时未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59445905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com