这个UiviewController怎么了?Swift 3,加载数据



我只是试图将此解析的比特币价格数据加载到表视图中。我现在将其设置为一个测试字符串,但这仍然不起作用。我已经检查了故事板上的所有内容,所以我假设这是此代码中的东西:

import UIKit
import Alamofire
import AlamofireObjectMapper
import ObjectMapper
class Response: Mappable {
    var data: [Amount]?
    required init?(map: Map){
    }
    func mapping(map: Map) {
        data <- map["data"]
    }
}
class Amount: Mappable {
    var data : String?
    required init?(map: Map){
    }
    func mapping(map: Map) {
        data <- map["data.amount"]
    }
}
let mount = [String]()
let am = [String]()
class ViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource {
    @IBOutlet var tableView: UITableView!
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = "test"
        return cell
    }
    func Call_bitcoin(){
        let url = "https://api.coinbase.com/v2/prices/BTC-USD/buy"
        Alamofire.request(url).responseObject{ (response: DataResponse<Amount>) in
            let mount = response.result.value
            let am = mount?.data
            print(am)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        Call_bitcoin()
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableView.delegate = self
        tableView.dataSource = self
        self.tableView.reloadData()
    }

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

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("You tapped cell number (indexPath.row).")
    }
}

您只需要在Alamofire请求的回调中调用方法reloadData()即可。这是因为Alamofire进行了异步调用。

然后,您将拥有这样的Call_bitcoin

func Call_bitcoin() {
    let url = "https://api.coinbase.com/v2/prices/BTC-USD/buy"
    Alamofire.request(url).responseObject{ (response: DataResponse<Amount>) in
        let mount = response.result.value
        let am = mount?.data
        print(am)
        self.tableView.reloadData()
    }
}

另外,您可以重构viewDidLoad方法,因为您不需要重新添加表格(您已经在Call_bitcoin上进行了操作 方法(。因此,ViewDidload就是这样:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    tableView.delegate = self
    tableView.dataSource = self
    Call_bitcoin()
}

重新加载tableview在数据成功获取时。

因为alamofire做asChronus呼叫。

func Call_bitcoin(){
          let url = "https://api.coinbase.com/v2/prices/BTC-USD/buy"         
Alamofire.request(url).responseObject
{ (response: DataResponse<Amount>) in 
      let mount = response.result.value                    
     let am = mount?.data print(am)
   tblView.reloadData()
 } 
}

当前您将空数组传递给NumberOfrowinsection,因此您需要将数量传递为

的数量
 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10 //because your am.count empty
    } 

相关内容

  • 没有找到相关文章

最新更新