我有12个ViewControllers。我的代码给这些ViewControllers之一(1-12)
提供了一个随机的seguelet segues = ["View1", "View2", "View3", "View4", "View5", "View6", "View7", "View8", "View9", "View10", "View11", "View12"]
let index = Int(arc4random_uniform(UInt32(segues.count)))
let segueName = segues[index]
self.performSegueWithIdentifier(segueName, sender: self)
现在,我想更改已选择的随机ViewController中的变量(var firstSegue = false
),但我无法弄清楚如何?
有人可以将其更改为可行的内容吗?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destinationVC = segue.destinationViewController as UIViewController
destinationVC.firstSegue = true
}
答案 0 :(得分:4)
制作具有firstSegue
属性的协议,并将其扩展到所有视图控制器。然后使用as? TheProtocolYouMade
代替as UIViewController
或者使用一个共同的子类。
编辑:示例代码
使用
制作协议firstSegue
属性
protocol P {
var firstSegue: Bool { get set }
}
将其扩展到所有视图控制器。
extension YOURViewController1: P {
}
假设YOURViewController1中有var firstSegue: Bool
。现在该属性是YOURViewController1符合协议P的方式。对具有该属性的所有视图控制器执行此操作。
现在你可以写这段代码了
if let asP = segue.destinationViewController as? P {
// you can access asP.firstSegue here
}
答案 1 :(得分:0)
由于此控制器的属性不是来自标准的UIViewController,而是一些自定义控制器,因此您可以强制转换它而不是填充此值。你也可以使用KVC - 这不是真正安全的解决方案。