Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当从其他ViewController设置时,UIView中的Swift-Enum显示为nil_Swift_Firebase_Enums_Swift5 - Fatal编程技术网

当从其他ViewController设置时,UIView中的Swift-Enum显示为nil

当从其他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

我的Firebase应用程序有问题。我在UIView中有一个枚举,即使在
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
        }
    }
}