Prepare For Segue With Array - Xcode 8.0 Swift 3.0

一笑奈何 提交于 2019-12-02 10:38:55

I am pretty new to iOS/Swift but I recently ran into the same situation. Here is how I do it.

SourceViewController.swift

class SourceViewController: UIViewController {
    let stringToPass = "Hello World"

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as! DestinationViewController
        destinationVC.receivedString = stringToPass
        }
    }

DestinationViewController.swift

class DestinationViewController: UIViewController {

    var receivedString: String?

    if let newString = receivedString {
        print(newString)
    }
...

I realize this is slightly different than your example, but the important thing to note is that when you create "destinationVC" you are then able to modify the properties of it. The key difference is you have to provide the scope of the variable (destinationVC.receivedString) when assigning a value or in your case appending to an array:

destViewController.items.append(textField.text!)

Without providing the scope Xcode is unable to find the variable (identifier) you are trying to modify since it wasn't part of the current file or part of an import.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("thank you very much for your helpful suggestions")
print("I think I am pointed at the right direction")
print("Thanks again for your generous contributions")
print("Apoligies! Stackoverflow is pretty well automated to allow me to put it in non programatic format")
}

I use this code for my projects, in case you use a UITableView:

// On first viewController
public override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segue" {
        let vc = segue.destination as! VC2
        vc.data = sender as! [String]

    }
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    var dataArray: [String] = []

    dataArray.append(items[indexPath.row].id)
    dataArray.append(items[indexPath.row].title)
    dataArray.append( items[indexPath.row].details)

    performSegue(withIdentifier: "segue", sender: dataArray)


}

Just get on second your array

var data: [String] = []

id.text = data[0]
title.text = data[1]
details.text = data[2]
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!