Swift 如何将二维阵列传递给viewcontroller?

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)

我正在解码结果,我想将名称和id发送到viewcontroller。 我刚开始学习JSON可编码 那么,如何传递这些数据呢?我已经将这两个变量声明为一个数组

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)
    }
}