简体   繁体   中英

error : type “UserAccView” does not conform to protocol 'UITableViewDataSource'

So I am trying to add some data returned from a function and I can only access that data from inside that function so I ended up putting the table inside the function but after I did so I received the error above.

Any ideas?

This is my code:

import Foundation

import UIKit

class UserAccView: UIViewController , UITableViewDataSource {



@IBAction func GetUserInfo(_ sender: UIButton) {



    guard let url = URL(string: "https://goollyapp.azurewebsites.net/api/v0.1/Goolly/User/218910182109") else{return}
        let session = URLSession.shared
        session.dataTask(with: url) { (data, response, error) in
            if let response = response {
            print (response)
            }
            if let data = data {
                let json = try? JSONSerialization.jsonObject(with: data, options: [])
                guard let data_array = json as? NSArray else
                {
                    return
                }
                for i in 0 ..< data_array.count
                {
                    if let data_object = data_array[i] as? NSDictionary
                {
                        if  let Body        = data_object["id"] as? String,
                            let InfoId = data_object["TransDate"] as? String,
                            let Title      = data_object["Debt"] as? String,
                            let UserId     = data_object["Crdit"] as? String,
                            let InfoType     = data_object["Desc"] as? String

                        {}
                    }
    }
    }
            func numberOfSections(in tableView: UITableView) -> Int {
                return 1
            }
            func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                return (data?.count)!
            }
            func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                var cell = UITableViewCell()
                cell.textLabel?.text = "cells"
                return cell
            }

    }.resume()
    }
}

Why you have added the dataSource methods inside your Api Call ? Write those methods outside of your GetUserInfo IBAction .

Secondly, now you want to reload the tableview. For that create IBOutlet for tableview first and when response comes from the api you can reload the tableview after filling the response in your data array.

Lastly don't use var cell = UITableViewCell() like this in cellForRowAt . It will freeze your tableview . Use it like this

let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell. 

Hope it helps you

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM