所以我已连接到此API,并使用ALAMOFIRE和SWIFTYJSON从中检索一些数据,然后将其显示到UItable视图:
以下是JSON Return示例:
{
"status" : "success",
"countries" : [
{
"name" : "Åland Islands",
"flag" : "https:\/\/1fx.cash\/\/flags\/europe.png",
"currency_code" : "EUR",
"country_iso3" : "ALA",
"country_code" : "AX"
},
{
"name" : "American Samoa",
"flag" : "https:\/\/1fx.cash\/\/flags\/usa.png",
"currency_code" : "USD",
"country_iso3" : "ASM",
"country_code" : "AS"
},
{
"name" : "Virgin Islands, U.S.",
"flag" : "https:\/\/1fx.cash\/\/flags\/usa.png",
"currency_code" : "USD",
"country_iso3" : "VIR",
"country_code" : "VI"
}
]
}
这是我的整个viewcontroller:
import UIKit
import Alamofire
import SwiftyJSON
class addCountry: UIViewController, UITableViewDataSource, UITableViewDelegate {
var datas: [JSON] = []
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(.GET, "https://sample.com/countries").responseJSON { (request, response, json, error) in
if json != nil {
var jsonObj = JSON(json!)
if let data = jsonObj["countries"].arrayValue as [JSON]?{
self.datas = data
self.tableView.reloadData()
}
}
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.datas.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
let data = datas[indexPath.row]
if let caption = data["countries"]["name"].string{
cell.textLabel?.text = caption
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let row = datas[indexPath.row]
println(row)
}
}
当我运行它时,它不会显示任何内容。
我使用println(行)所以当我选择一个单元格时,它会在控制台上打印一个数据,以显示那里确实存在数据,并且存在。
我在UItable视图上显示它们时遇到了麻烦。
任何人都可以帮助我吗?提前致谢! :)
答案 0 :(得分:2)
问题与您的数据结构以及在cellForRowAtIndexPath
中过滤出来的方式有关。
首先,您使用let data = datas[indexPath.row]
过滤掉一个国家/地区,这会为您提供如下数据集:
{
"name" : "Åland Islands",
"flag" : "https:\/\/1fx.cash\/\/flags\/europe.png",
"currency_code" : "EUR",
"country_iso3" : "ALA",
"country_code" : "AX"
}
之后,您尝试访问其中的countries
属性和name
属性。唯一的问题是,您在上面的代码段中看不到countries
属性。
相反,您需要直接访问name
属性,如下面的代码所示:
if let caption = data["name"].string{
cell.textLabel?.text = caption
}
答案 1 :(得分:0)
我认为你需要添加这个:
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
in
override func viewDidLoad() {
...
}