当从其他ViewController设置时,UIView中的Swift-Enum显示为nil
我的Firebase应用程序有问题。我在UIView中有一个枚举,即使在当从其他ViewController设置时,UIView中的Swift-Enum显示为nil,swift,firebase,enums,swift5,Swift,Firebase,Enums,Swift5,我的Firebase应用程序有问题。我在UIView中有一个枚举,即使在viewDidLoad()中设置它,它也会显示为nil。UIView只是一个标题视图,枚举通过一个开关语句确定要为哪个用户类型显示哪个按钮。以下是UIView的代码(缩短为仅显示可读性所需的代码): 下面是ViewController中设置选项的一系列函数和变量的顺序: override func viewDidLoad() { super.viewDidLoad() checkUser() } func
viewDidLoad()
中设置它,它也会显示为nil。UIView只是一个标题视图,枚举通过一个开关
语句确定要为哪个用户类型显示哪个按钮。以下是UIView的代码(缩短为仅显示可读性所需的代码):
下面是ViewController中设置选项的一系列函数和变量的顺序:
override func viewDidLoad() {
super.viewDidLoad()
checkUser()
}
func checkUser() {
if Auth.auth().currentUser?.uid == nil {
//...
} else {
configure()
}
}
func configure() {
//...
fetchUserData()
//...
}
func fetchUserData() {
guard let currentUid = Auth.auth().currentUser?.uid else { return }
Services.shared.fetchUserData(uid: currentUid) { user in
self.user = user
}
}
private var user: User? {
didSet {
if user?.accountType == .partner {
headerView.options = .partner
} else {
headerView.options = .client
}
}
}
User
对象的accountType
属性具有与HeaderView
类相同的枚举选项。更新异步函数
func fetchUserData() {
guard let currentUid = Auth.auth().currentUser?.uid else { return }
Services.shared.fetchUserData(uid: currentUid) {[weak self] user in
self?.user = user
DispatchQueue.main.async {
self?.configureButtonsInView() // add buttons here
}
}
}
事实上,你需要发布更多的代码,在这个枚举的基础上添加按钮。。。我怀疑这个问题与异步调用有关。。。您可以在设置之前访问选项…变量user是否会返回nil而不是enum?@jawadAli在addSubview(按钮)
设置约束后我所做的一切。我想我想问的是,如何等到用户设置好后再实例化HeaderView
UIView,这样选项就设置好了,并且可以正确配置它。@purebreadd这很奇怪,我在fetchUserData()
方法调用后打印出user
,结果显示为nil。我需要调查一下。我猜用户还没有登录到firebase。在访问用户的uid之前,需要对用户进行身份验证。在数据库中保存用户数据,以及让用户通过身份验证/登录Firebase是供参考的两个独立功能
func fetchUserData() {
guard let currentUid = Auth.auth().currentUser?.uid else { return }
Services.shared.fetchUserData(uid: currentUid) {[weak self] user in
self?.user = user
DispatchQueue.main.async {
self?.configureButtonsInView() // add buttons here
}
}
}