2014-06-06 15 views
17

Ho il seguente: ViewControllerAccesso variabili di un altro ViewController a Swift

class PageContentViewController: UIViewController { 

    var pageIndex: Int 

} 

Come dovrei accedere pageIndex da un altro ViewController?

ho bisogno di accedere pageIndex in questa funzione:

func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { 

    //var index: Int 
    //index = ? 

    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; // in Swift? 

    if ((index == 0) || (index == NSNotFound)) { 
     return nil; 
    } 

    index--; 

    return [self viewControllerAtIndex:index]; // in Swift? 
} 
+2

la risposta di questa domanda è la stessa di altre domande "Accesso alle variabili da un'altra classe". è necessario ottenere prima il riferimento dell'oggetto. (e penso che sia una cattiva domanda) –

+0

'var index: Int = PageContentViewController (viewController) .pageIndex' è così che potresti tradurre quella riga in Swift credo – connor

+0

@BryanChen: Pensi o lo sai? Un link sarebbe bello per una risposta esistente. Sarei più che felice di chiudere questo una volta che l'hai fornito. – fuzz

risposta

20

Tutto per impostazione predefinita in rapida è pubblico e, quindi, se si dichiara qualcosa di simile:

class SomeViewController: UIViewController { 
    var someVariable: SomeType = someValue 

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } 
} 

È possibile accedere a più a lungo come si ha un'istanza di esso:

var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil) 
var getThatValue = myCustomViewController.someVariable 
+0

funziona solo se le classi si trovano nello stesso file? – connor

+2

questo non è un motivo valido per utilizzare la variabile globale. e cosa succede se hai più istanze di 'PageContentViewController'? –

+2

@BryanChen: Con ogni mezzo, mostraci come accedere correttamente alla variabile. – fuzz

3

Ecco il mio tentativo di convertire t quel codice a rapida:

func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { 

    var pageController = viewController as PageContentViewController 
    var index: Int? = pageController.pageIndex 

    if var idx: Int = index{ 
     if idx == 0{ 
      return nil 
     } 
     else{ 
      idx-- 
      return viewControllerAtIndex(idx) 
     } 
    } 
    else{ 
     return nil 
    } 
} 
class PageContentViewController: UIViewController { 

    var pageIndex: Int? 

} 
4

ViewController1.swift

class ViewController1: UIViewController { 

    struct GlobalVariable{ 
     static var myString = String() 
    } 
} 

ViewController2.swift

class ViewController2: UIViewController 
{ 

print(ViewController1.GlobalVariable.myString) 

} 
+0

Fastidioso che devi chiamare GlobalVariable.myString anche in ViewController1 e non posso semplicemente fare riferimento a myString lì. Ma questo funziona bene per farvi riferimento nell'altro controller della vista. Grazie! – RanLearns

1

ho risolto in questo modo. .

class StaticLinker 
{ 
    static var viewController : PageContentViewController? = nil 
} 

class PageContentViewController: UIViewController 
{ 

    var pageIndex: Int 
    StaticLinker.viewController = self 
} 

class AnotherClass 
{ 
    StaticLinker.viewController.pageIndex = 100 
} 
+0

Dai uno sguardo a questo [come risposta] (http://stackoverflow.com/help/how-to-answer). – thewaywewere

+0

grazie, migliorerò le mie risposte le prossime volte.:) – Roy

+0

@thewaywewere Cosa c'è di sbagliato nel modo in cui ha risposto? – fuzz

Problemi correlati