我正在为Segue做准备(此刻只是学习!)并希望通过segue传递一个在函数中创建的数组,以便到达新的视图控制器。
如果我只是在其中放置一个文本字符串,它工作正常,但是当我尝试更改为数组时它是空白的 - 我认为因为它无法访问数组,因为它是超出范围 - 但我仍然坚持如何做到
这是最初的VC代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToWorkout" {
if let destVC = segue.destination as? WorkoutViewController {
destVC.workoutName = (testArray)
}
}
//Get the new view controller using segue.destinationViewController.
//Pass the selected object to the new view controller.
}
func testfunction() {
let testArray = ["blah","blah","ploop"]
}
和接收VC代码'
class WorkoutViewController: UIViewController {
var workoutName = [String]()
override func viewDidLoad() {
super.viewDidLoad()
print(workoutName)
// Do any additional setup after loading the view.
}
我几乎就在那里,但我想我必须遗漏一些基本的东西。你如何传递函数中创建的数组/其他变量?
如果函数有多于1个变量/数组,那会改变方法吗?即一个函数可能会产生锻炼中的练习和代表的数量,例如
答案 0 :(得分:1)
您可以发件人
发送 self.performSegue(withIdentifier: "goToWorkout ", sender: testArray)
并在
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToWorkout" {
if let destVC = segue.destination as? WorkoutViewController {
destVC.workoutName = sender as! [String]
}
}
答案 1 :(得分:0)
func testfunction() -> [String] {
return ["blah","blah","ploop"]
}
我想这就是你想要的。函数/方法可以返回值。它可以通过->
语法来实现。
现在您可以使用:
destVC.workoutName = testfunction()
几点注释
函数,方法和变量应该通过驼峰案例表示法命名。因此,您应该写testfunction
而不是testFunction
(或许也可以选择更好的名称)。
不要忘记阅读有关该主题的Apple文档:Functions。
答案 2 :(得分:0)
是的,两个testArray
的出现都不在同一范围内,编译器会抱怨。
以这种方式声明函数
func testfunction() -> [String] {
let testArray = ["blah","blah","ploop"]
return testArray
}
并通过调用函数
来分配数组destVC.workoutName = testfunction()
答案 3 :(得分:0)
您的问题是由testArray
作为testfunction
函数内定义的局部变量引起的,只能从函数内部访问。如果你想让一个变量可以从类中的任何地方访问,你必须使它成为一个实例属性。
class InitialVC: UIViewController {
let testArray = ["blah","blah","ploop"]
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToWorkout" {
if let destVC = segue.destination as? WorkoutViewController {
destVC.workoutName = testArray
}
}
//Get the new view controller using segue.destinationViewController.
//Pass the selected object to the new view controller.
}
}
答案 4 :(得分:0)
说:
destVC.workoutName = (testArray)
在prepare(for segue: UIStoryboardSegue, sender: Any?)
方法中,肯定不引用testArray
中的testfunction()
变量,因为它是一个局部变量。如果您没有在上面的行中收到编译时错误,那么可能是您在视图控制器中的某个地方声明testArray
,或者可能是应用程序中的全局声明。
所以你可以做的是将testfunction()
声明为testfunction() -> [String]
:
func testfunction() -> [String] {
return["blah","blah","ploop"]
}
因此:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToWorkout" {
if let destVC = segue.destination as? WorkoutViewController {
destVC.workoutName = testfunction()
}
}
}