如何在 Swift 3.0 中的控制器之间传递 JSON 数据?
Posted
技术标签:
【中文标题】如何在 Swift 3.0 中的控制器之间传递 JSON 数据?【英文标题】:How do I pass JSON data between controller in Swift 3.0? 【发布时间】:2017-01-19 11:01:27 【问题描述】:我有这些 JSON 数据:
"login":"ET001","email":"email@try.com"
在 Swift 3.0 中,我创建了两个文件,分别是 LoginVC 和 ViewController。
只有在 LoginVC 验证凭据后才能访问 ViewController。到目前为止,我设法使登录访问基于数据库中的“成功”JSON 数据的 ViewController 页面。
但我的下一个目标是将 JSON 数据“[login]”从 LoginVC 传递到 ViewController。
在 ViewController 中,我创建了 UILabel "loginLbl" 来显示来自 LoginVC 的 JSON 值。
如何更新我的代码?
LoginVC.swift
import UIKit
class LoginVC: UIViewController
@IBOutlet var _login: UITextField!
@IBOutlet var _pass: UITextField!
@IBOutlet var outputLbl: UILabel!
var login: String!
var pass: String!
override func viewDidLoad() super.viewDidLoad()
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "tocey"
if let destination = segue.destination as? ViewController
destination.passedData = self.outputLbl.text
print("Sender value is : \(sender)")
@IBAction func loginData(_ sender: Any)
login = _login.text
pass = _pass.text
if(login == "" || pass == "")
return
else
let url = URL(string: "http://localhost/login.php")
let session = URLSession.shared
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
let paramToLogin = "login=\(login!)&pass=\(pass!)"
request.httpBody = paramToLogin.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest, completionHandler:
(data, response, error) in
if error != nil
return
else
do
if let json = try JSONSerialization.jsonObject(with: data!) as? [String: String]
DispatchQueue.main.async
let success = Int(json["success"]!)
let loginvaluefromdb = json["login"]
if(success == 1)
self.outputLbl.text = loginvaluefromdb;
let abc = json["login"]
self.performSegue(withIdentifier: "tocey", sender: abc)
return
catch
)
task.resume()
ViewController.swift
import UIKit
class ViewController: UIViewController
@IBOutlet var loginLbl: UILabel!
var passedData: String!
override func viewDidLoad()
super.viewDidLoad()
loginLbl.text = passedData
如何将其传递给UILabel loginLbl?
【问题讨论】:
Passing Data between View Controllers in Swift的可能重复 是的,我知道这个问题可能是重复的。但我仍然对如何传递数据感到困惑。 . @AlotJai 您的代码中没有导航代码。 你的意思是从 LoginVC 导航到 ViewController ? @AlotJai 是的,我正在考虑导航。 【参考方案1】:一旦您在响应中确定登录数据是正确的,您需要将 viewController 推送到导航控制器中,并在 viewController 中获取一个字典并将 json 分配给该字典。
if let json = try JSONSerialization.jsonObject(with: data!) as? [String: String]
DispatchQueue.main.async
let success = Int(json["success"]!)
let loginvaluefromdb = json["login"]
if(success == 1)
let viewController = self.storyboard?.instantiateViewController(withIdentifier: "yourViwController") as! yourViwController
viewController.dictJson = json
self.navigationController?.pushViewController(viewController, animated: true)
【讨论】:
感谢您的回复。让我先试试。谢谢:D "dictJson" 来自哪里? 在您已将 IBOutlet 用于 loginlbl 的视图控制器中放置此 dictJson 属性。让 dictJson = Dictionary if(success == 1)
self.outputLbl.text = loginvaluefromdb;
// Here you trigger the segue
self.performSegue(withIdentifier: "goToViewController", sender: loginvaluefromdb)
return
您需要在为 segue 方法准备中传递数据: 这是editec代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "goToViewController"
if let destination = segue.destination as? ViewController
// Here you will copy tha data you want to pass
destination.passedData = sender as? String
print("Sender Value: \(sender)")
【讨论】:
以上是关于如何在 Swift 3.0 中的控制器之间传递 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中的页面视图控制器内的视图控制器之间传递数据
在 Swift 中的 ONE ViewController 中的视图之间传递数据
swift 4 中使用 performSegue 打开的关闭页面时,如何在视图控制器和 TableViewController 之间传递数据?