我正在使用这个 api并想在 TableView 上打印 api 数据
import UIKit
import Alamofire
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var mySegmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
apiData()
}
@IBAction func mySegmentControlTapped(_ sender: Any) {
tableView.reloadData()
}
func apiData() {
Alamofire.request("https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
guard let json = response.result.value as? [String:Any] else{ return}
print("Response \(json)")
guard let data = json["data"] as? [String:Any] else { return}
print("data is \(data)")
for (key, value) in data {
print("\(key) -> \(value)")
}
break
case .failure(_):
print(response.result.error as Any)
break
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var returnValue = 0
switch(mySegmentedControl.selectedSegmentIndex)
{
case 0:
returnValue = day.count
break
case 1:
returnValue = month.count
break
case 2:
returnValue = db.count
break
case 3:
returnValue = day.count
break
default:
break
}
return returnValue
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let myCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! tableCell
switch(mySegmentedControl.selectedSegmentIndex)
{
case 0:
myCell.labelOne!.text = " "
myCell.labelTwo!.text = ""
myCell.labelThree!.text = ""
myCell.labelFour!.text = ""
break
case 1:
break
case 2:
break
case 3:
break
default:
break
}
return myCell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 90
}
}
class tableCell: UITableViewCell {
@IBOutlet weak var labelOne: UILabel!
@IBOutlet weak var labelTwo: UILabel!
@IBOutlet weak var labelThree: UILabel!
@IBOutlet weak var labelFour: UILabel!
}
使用此代码后,我获得了键和值,我的问题是我在 1 个键中获得了 6 个值。我如何存储所有这些值并将其打印在 tableview 上。这是我正在做的整个代码我正在使用段 Controller 根据日期月份更改数据
最佳答案
首先创建一个类来模拟响应:
class CustomDate: NSObject {
var quarter: Int!
var day: String!
var month: String!
var db: String!
var long: String!
var unix: Int!
init(quarter: Int, day: String, month: String, db: String, long: String, unix: Int) {
super.init()
self.quarter = quarter
self.day = day
self.month = month
self.db = db
self.long = long
self.unix = unix
}
}
然后创建一个数组来存储所有收到的日期:
var dates = [CustomDate]()
将 apiData
的实现更改为:
func apiData() {
Alamofire.request("https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
guard let json = response.result.value as? [String: Any] else { return }
guard let data = json["data"] as? [String: Any] else { return }
for (_, value) in data {
let dateValue = value as! [String: Any]
let date = CustomDate(quarter: dateValue["quarter"] as! Int,
day: dateValue["day"] as! String,
month: dateValue["month"] as! String,
db: dateValue["db"] as! String,
long: dateValue["long"] as! String,
unix: dateValue["unix"] as! Int)
self.dates.append(date)
}
print(self.dates)
self.tableView.reloadData()
break
case .failure(_):
print(response.result.error as Any)
break
}
}
}
然后您唯一需要做的就是用 dates
数组中的对象填充您的 tableView:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dates.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let date = dates[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel.text = date.long
return cell
}
当然,它需要根据您的需要进行适配。
关于ios - 在swift 4中从字典中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50838724/