Я извлекаю Array
в Swift из PHP, который содержит значения из нескольких SQL-запросов.Как распаковать массив из php в Swift через JSON
Массив послали, получил и отпечатано в 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)
}
Массив содержит userDetails
и Communities
и его выход в Xcode (через напечатанной отладки) выглядит следующим образом:
Optional(["userDetails": {
id = 2;
"user_email" = "[email protected]";
"user_name" = "<null>";
}, "communities": <__NSArrayI 0x60000002f500>(
{
name = Gallelio;
},
{
name = GallelioPart2;
}
)
])
Optional(["userDetails": {
id = 30;
"user_email" = "[email protected]";
"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)
}
}
}
', если позволяют сообщества = [«JSON сообщества»] как массив <Словарь> {// у вас есть сообщества, как массив и загрузить его с помощью представления таблицы методы ...} ' –
https://www.raywenderlich.com/120442/swift-json-tutorial Я считаю полезным для вас – seggy