gpt4 book ai didi

json - 在 Swift 中使用来自 Rest API 的数组填充 UITableview

转载 作者:可可西里 更新时间:2023-11-01 02:16:11 25 4
gpt4 key购买 nike

在我的 mainTableView Controller 中,我可以在控制台中打印 API 结果,但我不知道如何将它们设置为在我的 tableview 的单元格中可见

import UIKit
//from: https://github.com/Ramotion/folding-cell
class MainTableViewController: UITableViewController {

let kCloseCellHeight: CGFloat = 179
let kOpenCellHeight: CGFloat = 488

let kRowsCount = 100

var cellHeights = [CGFloat]()
var restApi = RestApiManager()
var items: NSDictionary = [:]


override func viewDidLoad() {
super.viewDidLoad()

restApi.makeCall() { responseObject, error in
// use responseObject and error here
// self.json = JSON(responseObject!)

print("print the json data from api ")
self.items = NSDictionary(dictionary: responseObject!)
self.tableView.reloadData()
print(responseObject!.count)
// print(self.items)
let resultList = self.items["result"] as! [[String:
AnyObject]]
print(resultList[5])
}

createCellHeightsArray()
self.tableView.backgroundColor = UIColor(patternImage:
UIImage(named: "background")!)


}

// MARK: configure
func createCellHeightsArray() {
for _ in 0...kRowsCount {
cellHeights.append(kCloseCellHeight)
}
}

// MARK: - Table view data source

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

guard case let cell as DemoCell = cell else {
return
}

cell.backgroundColor = UIColor.clearColor()

if cellHeights[indexPath.row] == kCloseCellHeight {
cell.selectedAnimation(false, animated: false, completion:nil)
} else {
cell.selectedAnimation(true, animated: false, completion: nil)
}

cell.number = indexPath.row
}


// with as! the cell is set to the custom cell class: DemoCell
// afterwards all data can be loaded in this method
override func tableView(tableView: UITableView, cellForRowAtIndexPath
indexPath: NSIndexPath) -> UITableViewCell {
let cell =
tableView.dequeueReusableCellWithIdentifier("FoldingCell",
forIndexPath: indexPath) as! DemoCell

//TODO: set all custom cell properties here (retrieve JSON and set in
cell), use indexPath.row as arraypointer

// let resultList = self.items["result"] as! [[String: AnyObject]]
// let itemForThisRow = resultList[indexPath.row]
// cell.schoolIntroText.text = itemForThisRow["name"] as! String

cell.schoolIntroText.text = "We from xx University..."
return cell
}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return cellHeights[indexPath.row]
}

// MARK: Table vie delegate

override func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath) {

let cell = tableView.cellForRowAtIndexPath(indexPath) as!
FoldingCell

if cell.isAnimating() {
return
}

var duration = 0.0
if cellHeights[indexPath.row] == kCloseCellHeight { // open cell
cellHeights[indexPath.row] = kOpenCellHeight
cell.selectedAnimation(true, animated: true, completion: nil)
duration = 0.5
} else {// close cell
cellHeights[indexPath.row] = kCloseCellHeight
cell.selectedAnimation(false, animated: true, completion:
nil)
duration = 0.8
}

UIView.animateWithDuration(duration, delay: 0, options:
.CurveEaseOut, animations: { () -> Void in
tableView.beginUpdates()
tableView.endUpdates()
}, completion: nil)


}
}

我得到的结果是正确的 JSON

{
result = (
{
city = Perth;
"cou_id" = AU;
environment = R;
image = "-";
name = "Phoenix English";
rating = 0;
"sco_id" = 2;
"sco_type" = LS;
},
{
city = "Perth ";
"cou_id" = AU;
environment = L;
image = "-";
name = "Milner college";
rating = 0;
"sco_id" = 3;
"sco_type" = LS;
},

我需要做什么来设置这些值并在此处设置它们?

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("FoldingCell", forIndexPath: indexPath) as! DemoCell
//TODO: set all custom cell properties here (retrieve JSON and set in cell), use indexPath.row as arraypointer

cell.schoolIntroText.text = "We from xx University..."
return cell
}

我不知道如何从这个 JSON 输出构造一个数组以及如何访问这些似乎嵌套在许多维度中的字段,作为菜鸟,感谢任何输入。

从类 restApi 添加:

// working method for calling api
func makeCall(completionHandler: (NSDictionary?, NSError?) -> ()) {

Alamofire.request(
.GET,
baseURL+schools+nonAcademicParameter,
headers: accessToken
)
.responseJSON { response in
switch response.result {
case .Success(let value):
completionHandler(value as? NSDictionary, nil)
case .Failure(let error):
completionHandler(nil, error)
}
}
}

最佳答案

在你的 TODO 点:

let resultList = self.items["result"] as! [[String: AnyObject]]
let itemForThisRow = resultList[indexPath.row]
cell.cityLabel.text = itemForThisRow["city"] as! String
cell.nameLabel.text = itemForThisRow["name"] as! String
...

为了在 swift 中更容易处理 json,请尝试 SwiftyJSON .

关于json - 在 Swift 中使用来自 Rest API 的数组填充 UITableview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com