我正在尝试在tableView中显示不同的数据,具体取决于登录的用户类型。如果typeOfUser
设置为admin,则应显示某些数据。如果是其他任何东西,它应该显示其他东西。
我在Unexpected non-void return value in void function
内的返回行上收到错误if typeOfUser == "admin"
。
这是我的代码:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if Auth.auth().currentUser != nil {
let user = Auth.auth().currentUser!
ref.child("users").child(user.uid).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let typeOfUser = value?["typeOfUser"] as? String ?? ""
if typeOfUser == "admin" {
return self.loggedInAdminsMenu.count // ERROR HERE
} else {
return self.loggedInMenu.count // ERROR HERE
}
}) { (error) in
print(error.localizedDescription)
}
} else {
return notLoggedInMenu.count
}
}
答案 0 :(得分:1)
在你的情况下,你没有从函数返回,你从闭包observeSingleEvent
返回,这是一个void函数。相反,您可以在viewDidLoad
中执行代码,而不是返回,您可以将值分配给变量并调用tableView.reloadData()
。不要忘记更改numberOfRows(inSection:)
函数以返回这个新创建的变量。
答案 1 :(得分:1)
另一种方法是在视图中调用带有闭包的函数,然后加载,返回相应的菜单计数。然后重新加载表视图。这种方式更强清洁和可重复使用。
功能
private func getMenuCountByUser(completion: @escaping (Int) ->() ) {
//your code of getting type of user
if Auth.auth().currentUser != nil {
let user = Auth.auth().currentUser!
ref.child("users").child(user.uid).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let typeOfUser = value?["typeOfUser"] as? String ?? ""
if typeOfUser == "admin" {
//return self.loggedInAdminsMenu.count // Change HERE
completion(self.loggedInAdminsMenu.count)
} else {
//return self.loggedInMenu.count // Change HERE
completion( return self.loggedInMenu.count)
}
}) { (error) in
print(error.localizedDescription)
}
然后在 viewDidLoad
中getMenuCountByUser { (menuCountFromClosue) in
//reload tableView
self.menuCount = menuCountFromClosue
tableView.reloadData()
}
注意:self。 menuCount 是一个变量,它将被赋予表视图numberOfRowsInASection
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return self.menuCount
}
希望有所帮助