【问题标题】:Type 'Users.Type' has no subscript members类型“Users.Type”没有下标成员
【发布时间】:2018-03-29 08:34:32
【问题描述】:

我想从用户数组中获取姓名和电子邮件,但我收到错误“输入任何?没有下标成员”

在 NewMessController.swift 中

class NewMessagesViewController: UITableViewController {
    let cellID = "cellId"
    var user = [Users]()

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "Cancel", style: .plain, target: self, action: #selector(handleCancel))

        fetchUser()
    }

    func fetchUser(){
        let rootRef = FIRDatabase.database().reference()
        let query = rootRef.child("users").queryOrdered(byChild: "name")
        query.observe(.value) { (snapshot) in
            for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
                if let value = child.value as? NSDictionary {
                    let user = Users()
                    let name = value["name"] as? String ?? "Name not found"
                    let email = value["email"] as? String ?? "Email not found"
                    user.name = name
                    user.email = email
                    self.user.append(user)
                    DispatchQueue.main.async { self.tableView.reloadData() }
                }
            }
        }
    }

    @objc func handleCancel(){
        dismiss(animated: true, completion: nil)
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return user.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellID)
        let user = Users[indexPath.row]
        cell.textLabel?.text = user.name //error here
        return cell
    }

}

在 Users.swift 中 导入 UIKit

class Users: NSObject {
    var name:String?
    var email:String?
}

如何修复它并获取名称和电子邮件?非常感谢。

【问题讨论】:

  • 错字:userUsers。顺便说一句,也许正因为如此:您的命名令人困惑。包含多个项目的数组应该以复数形式命名,但是代表一个项目的类应该以单数形式命名。
  • 好的!谢谢你,我会记住的
  • 并且不要将类中的属性声明为可选的不在场证明不要编写初始化程序。

标签: arrays swift dictionary anyobject


【解决方案1】:

尝试使用回复中的userData.value(forKey: "name") as? String

func fetchUser(){
        let rootRef = FIRDatabase.database().reference()
        let query = rootRef.child("users").queryOrdered(byChild: "name")
        query.observe(.value) { (snapshot) in

            DispatchQueue.main.async {

                for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
                    if let userData = child.value as? NSDictionary {
                        let user = Users()
                        let name = userData.value(forKey: "name") as? String ?? "Name not found"
                        let email = userData.value(forKey: "email") as? String ?? "Email not found"
                        user.name = name
                        user.email = email
                        self.user.append(user)
                    }
                }
                self.tableView.reloadData()
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多