2015-04-29 7 views
9

Durante il tentativo di implementare un'estensione per UIViewController mi rendo conto che non c'è modo normale, o non è permesso di ignorare queste funzioni (anche quando sono disponibili per UICollectionViewController e UITableViewController):L'estensione UIViewController non consente di ignorare le funzioni relative alla vista in Swift?

extension UIViewController{ 
    public override func viewWillAppear(){ 
    super.viewWillAppear() 
    //do some stuff 
} 
} 

mi rendo conto che non c'è modo normale, o non è permesso di ignorare queste funzioni (anche quando sono disponibili per UICollectionViewController e UITableViewController):

  • viewDidLoad
  • viewWillLoad
  • viewWillAppear
  • viewDidAppear

C'è qualche modo per fare questo? Mi piacerebbe avere qualche implementazione lì e lavorare per ogni UIViewController sulla mia app ... Tutto in un solo posto.

prega di notare che io non voglio fare una nuova classe sottoclasse UIViewController, ignorando quei metodi e facendo il mio controller per estenderlo. Questa è la soluzione più ovvia e più semplice, ma questo non soddisfa quello che sto cercando di fare.

sto usando rapida 1.2 in XCode 6,3

+1

Puoi spiegare un po '... perché vuoi farlo? Immagino che cosa intendo sia, dal momento che 'viewDidLoad' ecc. Esiste, ed esiste esattamente in modo che tu possa sovrascriverli, e dato che normalmente uno li sovrascrive (perché è esattamente ciò per cui sono), che cosa vuoi di più? – matt

+0

Mi piacerebbe avere alcune cose in corso lì, e andando avanti per ogni UIViewController sulla mia gerarchia. Diciamo, vorrei verificare, ad esempio, se c'è connettività ogni volta che presento un UIViewController. Questo è possibile per UIViewCollectionController, quindi .. perché non per UIViewController? –

+1

"Vorrei verificare, ad esempio, se c'è connettività ogni volta che presento un UIViewController" Lascia che ti spinga un po 'di più.Perché hai bisogno di farlo? Non avrebbe più senso verificare se ci fosse connettività ogni volta che si connetteva _need_? – matt

risposta

12

cosa si sta cercando di fare è simile a quanto fatto da questo codice:

class MyClass { 
    func myFunc() {} 
} 

extension MyClass { 
    override func myFunc() {} 
} 

I 4 metodi che si sta tentando di ignorare sono definiti in UIViewController e non in una delle sue superclassi. E non puoi sovrascrivere un metodo che è definito nella stessa classe.

Aggiornamento

posso pensare di 2 modi diversi per risolvere il problema - la prima è quella che non si vuole (sottoclasse UIViewController).

L'altro è metodo swizzling - non l'ho mai usato, quindi non voglio fornirti informazioni inaccurate. Forse vale la pena leggere this article di Nate Cook, che per inciso sta mostrando un esempio di sostituzione di viewWillAppear.

+0

Questo ha senso. Qualche soluzione? –

+0

@HugoAlonso: forse sì - leggi la risposta di aggiornamento – Antonio

+0

@Antonio Sono nuovo su swift quindi potresti dirmi qual è lo scopo o il vantaggio dell'utilizzo dell'estensione? Ad esempio, perché mettere tableview dataSource in estensione non direttamente nella mia classe? – Chlebta

Problemi correlati