Ios Swift:将TableView节与对象数组一起使用(错误:类型的值没有下标//类型的值没有成员“count”)

Ios Swift:将TableView节与对象数组一起使用(错误:类型的值没有下标//类型的值没有成员“count”),ios,arrays,swift,firebase,uitableview,Ios,Arrays,Swift,Firebase,Uitableview,我遇到了一个无法找到解决方案的问题,搜索网页也帮不了我 问题很简单。我知道如何使用TableView,也知道如何使用numberOfSections功能 现在的问题是,我正在以对象数组的形式从Firebase数据库检索数据。 这里是members=[PaymentTeam](),类的外观如下: class PaymentTeam { var key: String? let memberJob: String? let memberName: String?

我遇到了一个无法找到解决方案的问题,搜索网页也帮不了我

问题很简单。我知道如何使用TableView,也知道如何使用
numberOfSections
功能

现在的问题是,我正在以对象数组的形式从Firebase数据库检索数据。 这里是
members=[PaymentTeam]()
,类的外观如下:


class PaymentTeam {
    
    var key: String?
    let memberJob: String?
    let memberName: String?
    let memberID:String?
    let projectCreated:String?
    let projectName: String?
    let confirmedBool: Bool?
    let paidBool: Bool?
        
    
    init(memberJob: String, memberName: String, memberID:String, confirmedBool: Bool, paidBool: Bool, projectCreated:String, projectName: String) {
            

        self.memberName = memberName
        self.memberJob = memberJob
        self.memberID = memberID
        self.projectCreated = projectCreated
        self.confirmedBool = confirmedBool
        self.paidBool = paidBool
        self.projectName = projectName
        }
    
    
    var dictValue: [String: Any] {
        
        return ["memberName" : memberName as Any,
                "memberJob" : memberJob as Any,
                "memberID": memberID as Any,
                "projectCreated": projectCreated as Any,
                "confirmedBool": confirmedBool as Any,
                "paidBool": paidBool as Any,
                "projectName": projectName as Any
                ]
        

    }
    init?(snapshot: DataSnapshot) {
        guard let dict = snapshot.value as? NSDictionary,
            
            let memberJob = dict["memberJob"] as? String,
            let memberName = dict["memberName"] as? String,
            let projectCreated = dict["projectCreated"] as? String,
            let projectName = dict["projectName"] as? String,
            let memberID = dict["memberID"] as? String,
            let confirmedBool = dict["confirmedBool"] as? Bool,
            let paidBool = dict["paidBool"] as? Bool
       
            else {return nil}
                         self.memberJob = memberJob
                         self.memberName = memberName
                         self.projectCreated = projectCreated
                         self.projectName = projectName
                         self.memberID = memberID
                         self.confirmedBool = confirmedBool
                         self.paidBool = paidBool
    }
    
}
   static func chosenTeam(for user: User, completion: @escaping ([PaymentTeam]) -> Void) {
        let ref = Database.database().reference().child("selectedTeams").child(User.current.uid)
        ref.observe(DataEventType.value, with: { (snapshot) in
            guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
                return completion([])
            }
            let chosenTeam = snapshot.reversed().compactMap(PaymentTeam.init)
            completion(chosenTeam)
        })
    }
检索过程如下所示:


class PaymentTeam {
    
    var key: String?
    let memberJob: String?
    let memberName: String?
    let memberID:String?
    let projectCreated:String?
    let projectName: String?
    let confirmedBool: Bool?
    let paidBool: Bool?
        
    
    init(memberJob: String, memberName: String, memberID:String, confirmedBool: Bool, paidBool: Bool, projectCreated:String, projectName: String) {
            

        self.memberName = memberName
        self.memberJob = memberJob
        self.memberID = memberID
        self.projectCreated = projectCreated
        self.confirmedBool = confirmedBool
        self.paidBool = paidBool
        self.projectName = projectName
        }
    
    
    var dictValue: [String: Any] {
        
        return ["memberName" : memberName as Any,
                "memberJob" : memberJob as Any,
                "memberID": memberID as Any,
                "projectCreated": projectCreated as Any,
                "confirmedBool": confirmedBool as Any,
                "paidBool": paidBool as Any,
                "projectName": projectName as Any
                ]
        

    }
    init?(snapshot: DataSnapshot) {
        guard let dict = snapshot.value as? NSDictionary,
            
            let memberJob = dict["memberJob"] as? String,
            let memberName = dict["memberName"] as? String,
            let projectCreated = dict["projectCreated"] as? String,
            let projectName = dict["projectName"] as? String,
            let memberID = dict["memberID"] as? String,
            let confirmedBool = dict["confirmedBool"] as? Bool,
            let paidBool = dict["paidBool"] as? Bool
       
            else {return nil}
                         self.memberJob = memberJob
                         self.memberName = memberName
                         self.projectCreated = projectCreated
                         self.projectName = projectName
                         self.memberID = memberID
                         self.confirmedBool = confirmedBool
                         self.paidBool = paidBool
    }
    
}
   static func chosenTeam(for user: User, completion: @escaping ([PaymentTeam]) -> Void) {
        let ref = Database.database().reference().child("selectedTeams").child(User.current.uid)
        ref.observe(DataEventType.value, with: { (snapshot) in
            guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
                return completion([])
            }
            let chosenTeam = snapshot.reversed().compactMap(PaymentTeam.init)
            completion(chosenTeam)
        })
    }
现在的问题是:

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return members[section].count
      
        }
我收到错误消息:
类型为“PaymentTeam”的值没有成员“计数”
,我只能在不同的类成员之间进行选择,如
成员。memberID

对于功能:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let member = members[indexPath.section][indexPath.row]
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "ChosenTeamNameTableViewCell") as! ChosenTeamNameTableViewCell
            cell.memberNameLabel.text = member.memberName
            
            return cell
            }
我收到以下错误消息:

Value of type 'PaymentTeam' has no subscripts
其中,
[indexPath.section]
带下划线

也许有人能帮我弄清楚如何在
成员
数组中构造Firebase数据,以便实际使用
numberofSections

以下是带有Tableview的ViewController的全部代码:

class PaymentHomeViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var headerSeperator: UIView!
    
        
   
    var members = [PaymentTeam]()

    override func viewDidLoad() {
            super.viewDidLoad()

            setUpUI()
            
            UserService.chosenTeam(for: User.current) { (chosenTeam) in
                self.members = chosenTeam
                for value in self.members {
                    self.projectTitles.append(value.projectName ?? "Error")
                }
                self.tableView.reloadData()
            }
        }
        

    func setUpUI() {
        Utilities.addShadowtoView(headerSeperator)
    }

 extension PaymentHomeViewController: UITableViewDataSource {

        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

          
        }
        
        func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            let label = UILabel()
            label.text = "Header"
            label.backgroundColor = UIColor.lightGray
        }
        
        func numberOfSections(in tableView: UITableView) -> Int {
            return members.count
          }
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return members[section].count
      
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let member = members[indexPath.section][indexPath.row]
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "ChosenTeamNameTableViewCell") as! ChosenTeamNameTableViewCell
            cell.memberNameLabel.text = member.memberName
            
            return cell
            }
        }


    // MARK: - UITableViewDelegate

    extension PaymentHomeViewController: UITableViewDelegate {

        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
         return 78
            
        }
    }






提前感谢您的帮助。:)

numberOfRowsInSection
中,您无意中试图在此处访问名为“count”的“PaymentTeam”类型的成员:

“members”是一维数组,因此,
members[section]
返回类型为
PaymentTeam
的对象,该对象不是数组,因此不会有计数。将其更改为:

return members.count
现在,第二个错误出现在这一行:

let member = members[indexPath.section][indexPath.row]
同样,“成员”是一维数组,而不是二维数组。您正试图使用
array[index1][index2]
访问二维数组的成员。这没有意义,因为
PaymentTeam
不是数组。您可以在StackOverflow线程中找到有关swift中二维数组的更多信息。将此更改为:

let member = members[indexPath.row]