swift - Swift - 从其他 ViewController 设置时,UIView 中的枚举显示为 nil
问题描述
我在使用这个 Firebase 应用程序时遇到了问题。我在 UIView 中有一个枚举,即使我在viewDidLoad()
. UIView 只是一个标题视图,枚举通过一个switch
语句来确定要为哪种用户类型显示哪个按钮。这是 UIView 的代码(缩短为仅显示必要的代码以提高可读性):
enum HeaderViewOptions: Int {
case partner
case client
}
class HeaderView: UIView {
var options: HeaderViewOptions!
//...
override init(frame: CGRect) {
super.init(frame: frame)
//...
switch options {
case .partner:
addSubview(addServiceButton)
//...
case .client:
addSubview(searchButton)
//...
case .none:
break
}
}
}
这是设置变量的 ViewController 中按顺序排列的一系列函数和变量的位置options
:
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
}
}
}
对象的accountType
属性与类User
具有相同的枚举选项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
}
}
}
推荐阅读
- python - 深度排序使用大量 CPU
- c++ - 使用 C++ 拆分 html 响应
- python - 如何对每 n 行进行分组并求和,但在熊猫中保持原始结构
- python - 试图从本地文件中获取 HTML 代码到我的电子邮件发件人
- python - openpyxl中正确路径的文件路径错误?
- java - 超类中超类属性的子类中的子类属性
- reactjs - 为什么我的无线电输入没有在 React 中呈现
- node.js - 用猫鼬返回另一个对象数组的最后一项
- javascript - Firefox:第一个 CORS 请求被阻止,第二个有效
- processing - 如何为处理中的饼图创建单独的类选项卡?