2016-06-23 58 views
2

我有12个ViewControllers。我的代码给这些ViewControllers(1-12)的一个随机赛格设置随机ViewController的值(随机选择)

let 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 
} 

回答

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 
} 
+0

你能给一个带有'firstSegue'协议的例子吗?我无法确切知道如何将它放入代码中,但我认为你有正确的答案。 :-) –

0

由于该控制器具有属性,它不是从标准的UIViewController,比它的一些定制的控制器,所以你可以施放它比填补这个值。以及您可以使用KVC - 这不是真正安全的解决方案。