Swift 如何将二维阵列传递给viewcontroller?
我正在解码结果,我想将名称和id发送到viewcontroller。 我刚开始学习JSON可编码 那么,如何传递这些数据呢?我已经将这两个变量声明为一个数组Swift 如何将二维阵列传递给viewcontroller?,swift,swift5,Swift,Swift5,我正在解码结果,我想将名称和id发送到viewcontroller。 我刚开始学习JSON可编码 那么,如何传递这些数据呢?我已经将这两个变量声明为一个数组 var cityNames = [String]() var cityNameId = [Int]() for cityName in display.cities{ print(cityName.id , cityName.name)
var cityNames = [String]()
var cityNameId = [Int]()
for cityName in display.cities{
print(cityName.id , cityName.name)
self.cityNames.append(cityName.name)
self.cityNameId.append(cityName.id)
}
打印时,我得到输出
1 Mumbai
2 Pune
3 Thane
预期结果
我想在下一个viewController的下拉列表中的标签上显示城市名称,然后从下拉列表中选择城市名称,。我需要按钮点击事件所选城市的ID。不要这样做
显然,cities
表示一个包含name
和id
信息的对象数组
删除数组
例如,始终传递结构或类的实例
if let firstCity = display.cities.first {
print(firstCity.id , firstCity.name)
// pass firstCity to next view controller
}
或
或者在表视图的didSelectRow
中
let city = display.cities[indexPath.row]
// pass city to next view controller
声明下一个视图控制器的引用(根据您的要求更改视图控制器/情节提要/标识符的名称):
或者,如果正在使用故事板,也可以从故事板实例化:
let nextVC = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "NextViewController") as! NextViewController
现在,将您想要的任何值作为2D数组传递给nextVC:
let cities2DArray = [cityNameId, cityNames] as [Any]
nextVC.cities2DArray = cities2DArray
您可以在prepare(对于segue:UIStoryboardSegue,sender:Any?)中完成上述所有工作
如果您将segue与identifier一起使用,那么只需在以编程方式进入下一个TVC之前完成这些工作
现在,确保在NextViewController
中声明了以下2DArray变量:
class NextViewController: UIViewController {
var cities2DArray = [Any]()
更新:
如果您确实希望在元组内部的1个数组中创建一个具有id及其对应名称的元组,则需要修改for循环,如下所示:
var citiesTuple = [(id: Int, name: String)]()
for cityName in display.cities{
citiesTuple.append((id: cityName.id, name: cityName.name))
}
首先为城市创建一个结构作为Class
或Struct
class Context {
let cities: [City]
init(with cities: [City]) {
self.cities = cities
}
}
而不是将变量描述为目标视图控制器中的上下文
class TargetViewController: UIViewController{
...
var context: Context?
}
然后,如果手动按下viewController
var targetController = TargetViewController()
targetController.context = Context(with: self.cities)
navigationController?.pushViewController(with: targetController)
或者,您可以使用prepareSegue
方法从故事板进行设置
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "TargetSegueIdentifier") {
var targetController = segue.destination as? TargetViewController
targetController.context = Context(with: self.cities)
}
}
你期望的结果是什么?您想对该结果做什么?我想在下一个viewController的下拉列表中的标签上显示城市名称,然后从下拉列表中选择城市名称,。我需要按钮点击事件所选城市的ID@MumtazHussainI已经这样做了。我正在获取2个数组值,但希望得到如上所述的合并结果。好的,我将尝试此ID为Int,名称为string@PatelFab现在检查这两个部分。如果让firstCity=display.cities.first{print(firstCity.id,firstCity.name)}
我尝试了这个方法,但是如果我想检索第三个数据,我应该怎么做。我只提供了几个示例cities
是一个数组,您可以通过索引(display.cities[2]
)或使用循环来订阅它。这取决于您要完成的任务。
class TargetViewController: UIViewController{
...
var context: Context?
}
var targetController = TargetViewController()
targetController.context = Context(with: self.cities)
navigationController?.pushViewController(with: targetController)
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "TargetSegueIdentifier") {
var targetController = segue.destination as? TargetViewController
targetController.context = Context(with: self.cities)
}
}