gpt4 book ai didi

arrays - 如何通过 JSON 将数组从 php 解压到 Swift 中

转载 作者:行者123 更新时间:2023-11-28 12:38:26 26 4
gpt4 key购买 nike

我正在从 PHP 中检索一个 Array 到 Swift 中,其中包含来自几个 SQL 查询的值。

通过以下代码在 Swift 中发送、接收和打印数组:

let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
DispatchQueue.main.async
{

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]

print (json)
}

该数组包含 userDetailsCommunities,它在 Xcode 中的输出(通过打印调试)如下所示:

Optional(["userDetails": {
id = 2;
"user_email" = "radowns82@gmail.com";
"user_name" = "<null>";
}, "communities": <__NSArrayI 0x60000002f500>(
{
name = Gallelio;
},
{
name = GallelioPart2;
}
)
])
Optional(["userDetails": {
id = 30;
"user_email" = "sam.bawdry@gmail.com";
"user_name" = "Samuel Bawdry";
}, "communities": <__NSArrayI 0x60800026e180>(
{
name = TesetTester;
},
{
name = Westbrook2;
},
{
name = WinnersOnly;
},
{
name = OneTwoThree;
},
{
name = WhoopdeWhoop;
}
)
])

我现在如何解压缩“社区”的内容,以便我可以在 UITableVIew 中显示其内容 - 我已经设置了 UITableView 并正在使用 '虚拟数据'。

这是完整的 Swift 脚本:

import UIKit

protocol UsernameSentDelegate {
func userLoggedIn(data: String)
}

class LoginViewController: UIViewController {

var delegate: UsernameSentDelegate? = nil

@IBOutlet weak var userEmailTextField: UITextField!
@IBOutlet weak var userPasswordTextField: UITextField!
@IBOutlet weak var displayUserName: UILabel!
var communitiesArray = [String]()


@IBAction func loginButtonTapped(_ sender: AnyObject)
{

let userEmail = userEmailTextField.text;
let userPassword = userPasswordTextField.text;

if (userPassword!.isEmpty || userEmail!.isEmpty) { return; }

// send user data to server side


let myUrl = URL(string: "http://www.quasisquest.uk/KeepScore/userLogin.php");

var request = URLRequest(url:myUrl!);

request.httpMethod = "POST";

let postString = "email=\(userEmail!)&password=\(userPassword!)";

request.httpBody = postString.data(using: String.Encoding.utf8);

let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
DispatchQueue.main.async
{


if(error != nil)
{

//Display an alert message
let myAlert = UIAlertController(title: "Alert", message: error!.localizedDescription, preferredStyle: UIAlertControllerStyle.alert);
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:nil)
myAlert.addAction(okAction);
self.present(myAlert, animated: true, completion: nil)
return
}

do {

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]

if let arr = json?["communities"] as? [String:String] {
self.communitiesArray = arr.map { $0["name"] }
}


// retrieve login details and check to see if all ok

if let parseJSON = json {

let returnValue = parseJSON["status"] as? String

if(returnValue != "error")
{

self.delegate?.userLoggedIn(data: userEmail! )

UserDefaults.set(UserDefaults.standard)(true, forKey: "isUserLoggedIn");


self.dismiss(animated: true, completion: nil)


} else {
// display an alert message
let userMessage = parseJSON["message"] as? String
let myAlert = UIAlertController(title: "Alert", message: userMessage, preferredStyle: UIAlertControllerStyle.alert);
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:nil)
myAlert.addAction(okAction);
self.present(myAlert, animated: true, completion: nil)
}

}
} catch
{
print(error)
}


}



}

task.resume()


}

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{

if segue.identifier == "loginView" {
let createViewController: ViewController = segue.destination as! ViewController
createViewController.communities = communitiesBox
print (communitiesBox)
}


}



}

最佳答案

您可以使用两种方式完成此操作。

声明一个 [[String:String]] 类型的 Array 并将其与您的 TableView 一起使用。

var communitiesArray = [[String:String]]()

let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
if let arr = json["communities"] as? [[String:String]] {
self.communitiesArray = arr
}
DispatchQueue.main.async {
self.tableView.reloadData()
}

现在在 tableView 方法集中使用 communitiesArray 就像 cell.label.text = self.communitiesArray[indexPath.row]["name"]

如果您的 communities 仅获得 name 值,那么如果您只创建类型为 [String] 的数组就更好了.

var communitiesArray = [String]()

let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
if let arr = json["communities"] as? [[String:String]] {
self.communitiesArray = arr.flatMap { $0["name"]}
}
DispatchQueue.main.async {
self.tableView.reloadData()
}

现在在 tableView 方法集中使用 communitiesArray 就像 cell.label.text = self.communitiesArray[indexPath.row]

关于arrays - 如何通过 JSON 将数组从 php 解压到 Swift 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40189863/

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