要重构一个函数,我试图将它全局化:
func loadUsers(_ users: [User] , _ tableView: UITableView) {
let usersRef = firebase.child("Users")
usersRef.observe(.value, with: { snapshot in
if snapshot.exists() {
users.removeAll()
...
}
我收到了:
不能在不可变值上使用变异成员:'users'是'let'常量
当我设置:
func loadUsers(_ users: [User] , _ tableView: UITableView) {
let usersRef = firebase.child("Users")
usersRef.observe(.value, with: { snapshot in
if snapshot.exists() {
if var users = users as? [User] {
users.removeAll()
...
}
它构建并运行,但我不断收到警告:
从'[User]'到'[User]'的条件演员总是成功
和 用于检查选项
的“[User]”类型的非可选表达式
解决问题的最佳方法是什么?非常感谢帮助。
PS ,我需要删除users
中的原始值。
答案 0 :(得分:1)
第一组代码中的错误是因为参数是不可变的。
第二组代码中的错误是因为您试图将if let
与非可选常量一起使用,并且您试图转换为相同的类型,使得转换无意义。
由于您希望此函数修改原始数组,因此您需要将其设为inout
参数:
func loadUsers(_ users: inout [User] , _ tableView: UITableView) {
let usersRef = firebase.child("Users")
usersRef.observe(.value, with: { snapshot in
if snapshot.exists() {
users.removeAll()
...
}
您现在还需要在传递给&
参数的var
之前添加users
。