我的服务器上有一个php脚本,它只是一个基本的sql SELECT语句,它从mysql数据库中获取一些数据,并返回许多行。
我已经使用alamofire和swiftyjson将数据打印到控制台,但是我想在表视图中显示它。
由于调用与tableView代码不在同一范围内(我认为这是我收到一条错误消息,提示“使用未解决的标识符”的原因)
我不确定如何将其设置为全局,但是我想我需要创建一个全局数组变量,但不确定是否应该将其设置为空?
全局:
let serviceURL = "http://example.com/service.php"
我将其放在这样的函数中:
func getUsers() {
Alamofire.request(serviceURL, method: .get).validate().responseJSON { (response) in
if response.result.isSuccess {
let userJSON : JSON = JSON(response.result.value!)
for (index,subJson):(String, JSON) in userJSON {
let firstName = subJson["first_name"].string
let lastName = subJson["last_name"].string
print(firstName)
}
} else {
print("Could not get results")
}
}
}
我需要计算返回的行数
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return firstName.count
}
然后实际显示在单元格中
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath)
cell.textLabel?.text = names[indexPath.row]
return cell
}
更新
import UIKit
import Alamofire
import SwiftyJSON
struct User {
var firstName: String
var lastName: String
private enum CodingKeys: String, CodingKey {
case firstName = "first_name"
case lastName = "last_name"
}
}
class UserTableViewController: UITableViewController {
var users = [User]()
let serviceURL = "http://example.com/service.php"
override func viewDidLoad() {
super.viewDidLoad()
getUsers()
}
func getUsers() {
Alamofire.request(serviceURL, method: .get).validate().responseJSON { (response) in
if response.result.isSuccess {
let userJSON : JSON = JSON(response.result.value!)
for (index,subJson):(String, JSON) in userJSON {
let firstName = subJson["first_name"].string
let lastName = subJson["last_name"].string
let user = User(firstName: firstName!, lastName: lastName!)
self.users.append(user)
}
} else {
print("Could not get results")
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath)
let user = users[indexPath.row]
cell.textLabel?.text = "\(user.firstName) \(user.lastName)"
return cell
}
}
答案 0 :(得分:0)
首先,您需要一个结构来保存数据
struct User {
var firstName: String
var lastName: String
}
然后,您需要一个数组来容纳json消息中的用户,并将其声明为视图控制器中的属性
var users = [User]()
然后在您的代码中使用它
func getUsers() {
Alamofire.request(serviceURL, method: .get).validate().responseJSON { (response) in
if response.result.isSuccess {
let userJSON : JSON = JSON(response.result.value!)
for (index,subJson):(String, JSON) in userJSON {
let firstName = subJson["first_name"].string
let lastName = subJson["last_name"].string
let user = User(firstName: firstName, lastName: lastName)
users.append(user)
}
} else {
print("Could not get results")
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath)
let user = users[indexPath.row]
cell.textLabel?.text = "\(user.firstName) \(user.lastName)"
return cell
}