ios - swift - 通过 Segue 返回并传递多个数组和一个 Int

标签 ios swift swift4

我正在编写一个小型基本程序(仍在学习),但我遇到了障碍。

我现在可以在 2 个 View Controller 之间传递 1 个数组,并在按下第二个 View Controller 中的按钮时成功打印它。

但是,我真正想做的是传递两个数组和一个整数,它们是从第一个 VC 上的函数创建的,并让它们通过第二个 VC 进行访问。

第一个 VC 的代码在这里:

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

    if segue.identifier == "goToWorkout" {
        if let destVC = segue.destination as? WorkoutViewController {
            destVC.bothArrays = self.testFunction()
        }
    }
    //Get the new view controller using segue.destinationViewController.
    //Pass the selected object to the new view controller.
}

func testFunction() -> [String] {
    let randomArray1 = ["blah","blah","ploop"]
    let randomArray2 = ["alan", "john"]
    let randomInt = 5
    return BOTH ARRAYS AND INT TO SEND TO THE NEXT VIEW CONTROLLER?
}

@IBAction func goPressed(_ sender: UIButton) {
    performSegue(withIdentifier: "goToNextVC", sender: self)
}

这里还有第二个 VC:

class WorkoutViewController: UIViewController {

    var randomArray1 = [String]()
    var randomArray2 = [String]()
    var randomInt = 0

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func nowButtonPressed(_ sender: UIButton) {
        print(randomArray1)
        print(randomArray2)
        print(randomInt)
    }
}

我可以只使用一个数组来使其工作,但我需要多个数组和一个要传递的值!我尝试过使用它(例如尝试 '-> [String], [String], Int)但没有运气

非常感谢任何帮助!

最佳答案

您可以简单地使用元组将多个不同类型的变量包含在一个变量中。您应该将包含 performSegue 函数中所有 3 个变量的元组作为 sender 参数传递,然后将它们分配给 prepare(for:) 中的相关实例属性 方法。

如果你想保留生成变量的函数,你应该将函数的返回类型更改为可以容纳3个变量的元组。

func testFunction() -> (arr1:[String],arr2:[String],randInt:Int) {
    let randomArray1 = ["blah","blah","ploop"]
    let randomArray2 = ["alan", "john"]
    let randomInt = 5
    return (randomArray1, randomArray2, randomInt)
}

然后将 testFunction 的返回值分配给 performSegue 的发送者输入参数:

performSegue(withIdentifier: "goToNextVC", sender: testFunction())

分配变量:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "goToWorkout" {
        if let destVC = segue.destination as? WorkoutViewController, let variablesToBePassed = sender as? (arr1:[String],arr2:[String],randInt:Int) {
            destVC.randomArray1 = variablesToBePassed.arr1
            destVC.randomArray2 = variablesToBePassed.arr2
            destVC.randomInt = variablesToBePassed.randInt
        }
    }
}

关于ios - swift - 通过 Segue 返回并传递多个数组和一个 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49882955/

相关文章:

ios - UIDatePicker 显示 12 小时时间而不是 24 小时时间

ios - 如何改变UICollectionView的填充方向?

ios - Swift 4 覆盖 func viewDidAppear(_ 动画 : Bool) not triggering when i dissmiss viewcontroller

ios - Swift 4 和 Firebase 中的信号量建议

ios - 在 setValue :forKey: 上崩溃

ios - Cocos2d-x在iOS上分享使用UIActivityViewController

ios - 如果 UITableView 没有数据,如何添加 UIImage 和 UILabel

iOS 应用程序在手动启动时崩溃/挂起,但在其他情况下不会

swift - 多个 SKSpriteNode 的 SpriteKit 多个 SKActions - 等待所有完成

swift - 使 NSDecimalNumber 可编码