如何在两个视图控制器之间的快速应用程序中传递 json 数据
Posted
技术标签:
【中文标题】如何在两个视图控制器之间的快速应用程序中传递 json 数据【英文标题】:How to pass json data in swift app between two viewcontrollers 【发布时间】:2016-01-20 21:20:47 【问题描述】:我在传递 json 数据方面需要帮助。我在这个数组中有 json 数据
var TableData:Array< String > = Array < String >()
在这个数组中我有名字、地址、纬度、经度
我在 tableView 中显示名称和地址,但我想在不同的 viewController 中创建带有纬度和经度的注释,具体取决于哪个单元格用户点击(名称,地址,纬度,经度应该相等),所以我问你如果 swift 有一些好的教程,或者你有一些建议。 谢谢。
【问题讨论】:
【参考方案1】:有许多不同的方法可以将数据从一个 swift 文件传递到另一个文件。在有rootViewController的情况下,点击一个按钮打开一个新的ViewController。之前在新的 ViewController 中定义了一个数组,json 解析的数组可以使用 prepareForSegue 方法传递。
在不同的 swift 文件之间传递信息的另一种流行方法是使用AppDelegate
。在这里,您可以使用称为 instantiateViewControllerWithIdentifier("identifier")
的方法创建不同 swift 类的实例。这可以通过创建一个故事板变量然后通过 storyboard.instantiateViewControllerWithIdentifier("identifier")
调用此方法来完成。
let newvc = self.storyboard?.instantiateViewControllerWithIdentifier("newvcIdentifier") as! (UIViewController extended class)
newvc.data = TableData
self.navigationController?.pushViewController(newController, animated: true)
其中newvc有一个变量声明如下:
var data: Array <String>!
另一种可以使用的方法是使用单例在所有类之间共享数据。在 swift3 中可以非常简单地创建单例,详情请查看here。
class JSONData
var json: Array <String>
static let sharedInstance = JSONData()
在继续下一个 vc 之前,您应该将数据存储在 sharedInstance 类中。这应该通过覆盖prepare方法来完成。可以在here找到有关此方法的文档@
sharedInstance.json = self.json
在共享实例中设置好数据后,加载新的视图控制器后,可以通过sharedInstance.json
访问该数据。
希望这对您有用,如果您有任何其他问题,请发表评论!
【讨论】:
【参考方案2】:我会这样做:
let newController = self.storyboard?.instantiateViewControllerWithIdentifier("newControllerIdentifier") as! NewControllerClassName
newController.data = array
self.navigationController?.pushViewController(newController, animated: true)
您似乎也在使用逗号分隔的字符串类型数组。 我宁愿创建一个如下所示的变量
var jsonArray:[[String:String]]?
【讨论】:
【参考方案3】:所以我问你是否有一些好的 swift 教程
http://matteomanferdini.com/how-ios-view-controllers-communicate-with-each-other/
他介绍了简洁的代码和最佳实践。最好在执行任何操作之前阅读此内容。
或者如果你有一些建议
您的代码需要干净。将纬度作为字符串传递,稍后会给您带来问题(转换、代码理解,甚至是错误)。 在这里创建一个新帐户并观看 Bob 叔叔。他的教训很有价值。以上 matteomanferdini 遵循鲍勃叔叔的做法。 https://www.safaribooksonline.com/library/view/clean-code/9780134661742/
【讨论】:
以上是关于如何在两个视图控制器之间的快速应用程序中传递 json 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SWRevealViewController 在两个视图之间传递数组?
iOS - 如何在通过手动 Segue 链接的两个视图控制器之间传递信息?