いくつかのSQLクエリの値を含むPHPからSwiftにArray
を取得しています。PHPから配列をSwiftにJSON経由で展開する方法
アレイ用に送られ、コードに従って、スイフトで受信して印刷:
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
は既に設定されていて、「ダミーデータ」を使用しています。
これは、フルスウィフトスクリプトです:
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)
}
}
}
cell.label.text = self.communitiesArray[indexPath.row]
のように '場合は聞かせて社会= JSON [ "コミュニティ"] <辞書https://www.raywenderlich.com/120442/swift-json-tutorial私はそれがあなたの役に立つと思う – seggy