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