无法在列表视图中使用已解析的数据
Cannot use parsed data on list view
我正在发出 JSON 请求并从 api 得到一些回应,
我正在解析它,但是优先级对我来说是个问题。
首先我用 alamofire 发送 .post,
其次我得到一些响应并用 swiftyjson 解析它
第三次尝试在列表视图上使用已解析的数据,但列表视图在解析之前先工作,并且 returns 空列表视图
我尝试将函数放在 viewdidload 的第一行,
我尝试在 viewdidload 中编写 Alamofire 和 swiftyjson 部分。
但其中 none 起作用,每次 listviews numberofrowinsection 函数首先起作用。
我无法使用我的助手 class 或任何静态变量,因为我持有信用卡数据,我不想为此造成一些安全问题。
import UIKit
import CreditCardForm
import Alamofire
import SwiftyJSON
class CreditCardScreen: UIViewController, UITableViewDelegate , UITableViewDataSource {
var json: JSON = []
var data: JSON = []
var token: Parameters = [
"token": Helper.token,
"page_index": "0",
"page_size": "20"
]
@IBOutlet weak var creditCardTableView: UITableView!
@IBOutlet weak var creditCardView: CreditCardFormView!
override func viewDidLoad() {
super.viewDidLoad()
getCreditCardsFromApi()
creditCardView.isHidden = true
creditCardTableView.delegate = self
creditCardTableView.dataSource = self
creditCardTableView.separatorStyle = .none
//creditCardView.changer(value:"10/20")
// Do any additional setup after loading the view.
}
@IBAction func unCreditCardScreen(_ sender: UIStoryboardSegue) {
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.data.count // everytime this line works before than api parsing
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell = Bundle.main.loadNibNamed("CreditCardIndexPage", owner: self, options: nil)?.first as! CreditCardIndexPage
let selectedCard = data[indexPath.row]
cell.cardHolderName = selectedCard["card_name"].stringValue
//cell.cardHolderName = isimler[indexPath.row]
cell.cardNumber = "4242424242424240"
cell.backgroundColor = UIColor.clear
cell.write()
return cell
}
func getCreditCardsFromApi(){
Alamofire.request("\(Helper.mainApi)/api/getPaymentCards", method: .post, parameters: token, encoding: JSONEncoding.default).responseJSON{response in
switch response.result{
case .success(let value):
self.json = JSON(value)
self.data = self.json["data"]
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
没有错误消息,但我试图通过断点查看哪个先工作,tableview 函数总是在声明变量后工作。
HTTP 请求需要时间。在加载 table 视图之前,它们不可能完成。正确的做法是在获得数据后重新加载 table 视图:
func getCreditCardsFromApi(){
Alamofire.request("\(Helper.mainApi)/api/getPaymentCards", method: .post, parameters: token, encoding: JSONEncoding.default).responseJSON{response in
switch response.result{
case .success(let value):
self.json = JSON(value)
self.data = self.json["data"]
self.tableView.reloadData() <--- this line!
case .failure(let error):
print(error.localizedDescription)
}
}
numberOfCellsInSection
仍将首先调用,但会在您收到响应后第二次调用。
我正在发出 JSON 请求并从 api 得到一些回应, 我正在解析它,但是优先级对我来说是个问题。
首先我用 alamofire 发送 .post,
其次我得到一些响应并用 swiftyjson 解析它
第三次尝试在列表视图上使用已解析的数据,但列表视图在解析之前先工作,并且 returns 空列表视图
我尝试将函数放在 viewdidload 的第一行, 我尝试在 viewdidload 中编写 Alamofire 和 swiftyjson 部分。
但其中 none 起作用,每次 listviews numberofrowinsection 函数首先起作用。
我无法使用我的助手 class 或任何静态变量,因为我持有信用卡数据,我不想为此造成一些安全问题。
import UIKit
import CreditCardForm
import Alamofire
import SwiftyJSON
class CreditCardScreen: UIViewController, UITableViewDelegate , UITableViewDataSource {
var json: JSON = []
var data: JSON = []
var token: Parameters = [
"token": Helper.token,
"page_index": "0",
"page_size": "20"
]
@IBOutlet weak var creditCardTableView: UITableView!
@IBOutlet weak var creditCardView: CreditCardFormView!
override func viewDidLoad() {
super.viewDidLoad()
getCreditCardsFromApi()
creditCardView.isHidden = true
creditCardTableView.delegate = self
creditCardTableView.dataSource = self
creditCardTableView.separatorStyle = .none
//creditCardView.changer(value:"10/20")
// Do any additional setup after loading the view.
}
@IBAction func unCreditCardScreen(_ sender: UIStoryboardSegue) {
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.data.count // everytime this line works before than api parsing
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell = Bundle.main.loadNibNamed("CreditCardIndexPage", owner: self, options: nil)?.first as! CreditCardIndexPage
let selectedCard = data[indexPath.row]
cell.cardHolderName = selectedCard["card_name"].stringValue
//cell.cardHolderName = isimler[indexPath.row]
cell.cardNumber = "4242424242424240"
cell.backgroundColor = UIColor.clear
cell.write()
return cell
}
func getCreditCardsFromApi(){
Alamofire.request("\(Helper.mainApi)/api/getPaymentCards", method: .post, parameters: token, encoding: JSONEncoding.default).responseJSON{response in
switch response.result{
case .success(let value):
self.json = JSON(value)
self.data = self.json["data"]
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
没有错误消息,但我试图通过断点查看哪个先工作,tableview 函数总是在声明变量后工作。
HTTP 请求需要时间。在加载 table 视图之前,它们不可能完成。正确的做法是在获得数据后重新加载 table 视图:
func getCreditCardsFromApi(){
Alamofire.request("\(Helper.mainApi)/api/getPaymentCards", method: .post, parameters: token, encoding: JSONEncoding.default).responseJSON{response in
switch response.result{
case .success(let value):
self.json = JSON(value)
self.data = self.json["data"]
self.tableView.reloadData() <--- this line!
case .failure(let error):
print(error.localizedDescription)
}
}
numberOfCellsInSection
仍将首先调用,但会在您收到响应后第二次调用。