将 NSArray 传递给 swift 中的下一个 viewcontroller

pass NSArray to next viewcontroller in swift

新手swift,希望能得到我的答案。我需要将 NSArray 传递给下一个视图控制器,并在按下按钮时以随机顺序传递。我在第二个视图控制器中声明了 UILabel 和一个变量,segue 似乎可以正常工作。唯一的问题是它没有传递任何价值。这是我的代码。

    @IBAction func ressedbutton(_ sender: Any) {

    let quotes: NSArray = ["Quote 000", "Quote 001", "Quote 002"]

    let range: UInt32 = UInt32(quotes.count)

    let randomNumber = Int(arc4random_uniform(range))
    let QuoteString = quotes.object(at: randomNumber)

   // self.resul.text = QuoteString as? String





    performSegue(withIdentifier: "showresult", sender: QuoteString)

    let myVC = storyboard?.instantiateViewController(withIdentifier: "result") as! result

    myVC.stringPassed =
        (QuoteString as? String)!



}

第二个视图的代码是

class 结果:UIViewController {

var stringPassed = ""
@IBOutlet weak var ResultLabel: UILabel!


override func viewDidLoad() {
    super.viewDidLoad()

    ResultLabel.text = stringPassed

我觉得我的问题出在myvc.stringpassed=...?我有的arry和in随机怎么传?

提前致谢。

您需要做的是在 performSegue 中使用 sender 传递该值,然后在 prepare(for:sender:) 中访问该值并将该值传递给 destinationController。

performSegue(withIdentifier: "showresult", sender: QuoteString)

现在在 prepare(for:sender:)

中使用这个 sender 参数
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? result, let data = sender as? String {
        vc.stringPassed = data
    }
}

您必须使用 prepare(for segue: UIStoryboardSegue, sender: Any?) 方法将数据分配给 toViewController.UIStoryboardSegue 对象 segue 具有标识符、目标和源等属性。

在此方法中,首先检查标识符,如果它匹配,则将目标控制器转换为自定义视图控制器并将数据分配给视图控制器对象。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showresult"{
        if let toViewController = segue.destination as? result {
            vc.stringPassed = QuoteString
        }
    }

}

尝试这种方式删除 segue 将情节提要 ID 提供给您要传递数据的视图控制器,并在下面粘贴相同的情节提要 ID (YourIdentifier)

    @IBAction func ressedbutton(_ sender: Any) {

    let quotes: NSArray = ["Quote 000", "Quote 001", "Quote 002"]

    let range: UInt32 = UInt32(quotes.count)

    let randomNumber = Int(arc4random_uniform(range))
    let QuoteString = quotes.object(at: randomNumber)

   // self.resul.text = QuoteString as? String

  let vc  = storyboard?.instantiateViewController(withIdentifier:"YourIdentifier") as! YourNextViewController


        vc.stringPassed = (QuoteString as? String)!


        self.present(vc, animated: true, completion: nil)

}