2014-10-08 8 views
10

Vorrei implementare una serie di funzioni e che vengano richiamate da vari controller di visualizzazione nella mia app.In XCODE/Swift, come posso creare una singola funzione che può essere chiamata da vari controller di visualizzazione?

Qual è l'approccio migliore per questo?

Un esempio di una funzione da utilizzare in tutta l'applicazione è questo che restituisce un float formattato come una stringa:

func roundAndFormatFloat(floatToReturn : Float, numDecimalPlaces: Int) -> String{ 

    let formattedNumber = String(format: "%.\(numDecimalPlaces)f", floatToReturn) 
    return formattedNumber 

} 
+0

La tua domanda è troppo vaga - dare alcuni esempi di ciò che le funzioni dovrebbero fare. Dovrebbero lavorare con i dati contenuti/gestiti dal controller di visualizzazione? O dai suoi punti di vista? – Antonio

+3

Hai considerato i metodi di classe? O un singleton? – Clafou

+0

Ho aggiornato la domanda per includere una funzione di esempio che deve essere utilizzata in varie viste in tutta l'app di Antonio. Clafou, non ho mai sentito parlare di un singleton ma potrei implementare la funzione in una classe e far restituire alla classe i float già formattati. Buona idea! – user3535074

risposta

27

Suggerisco di creare un nuovo file chiamato Util.swift e incollare questa funzione in quel file. Questo è ciò che Util.swift sarà simile:

import UIKit 

func roundAndFormatFloat(floatToReturn : Float, numDecimalPlaces: Int) -> String{ 

    let formattedNumber = String(format: "%.\(numDecimalPlaces)f", floatToReturn) 
    return formattedNumber 

} 

È possibile posizionare le altre funzioni e costanti avete bisogno in Util.swift. Per chiamarlo nel tuo controller di visualizzazione, fai questo:

var str = roundAndFormatFloat(float, numDecimalPlaces: decimalPlaces) 

Ecco un'altra opzione. Creare un'altra classe chiamata Util, e mettere questa funzione in là come una funzione di classe:

import UIKit 

class Util{ 
    class func roundAndFormatFloat(floatToReturn : Float, numDecimalPlaces: Int) -> String{ 

     let formattedNumber = String(format: "%.\(numDecimalPlaces)f", floatToReturn) 
     return formattedNumber 

    } 
} 

Chiamarlo sarebbe simile a questa:

var str = Util.roundAndFormatFloat(float, numDecimalPlaces: decimalPlaces) 

È possibile aggiungere altri metodi di classe qui che è necessario utilizzare globalmente. Si noti che non è possibile creare variabili o costanti globalmente disponibili, poiché le variabili e le costanti di classe non sono ancora state implementate in Swift.

+1

Questo è fantastico. Speravo di essere in grado di creare un file separato. Molte grazie. – user3535074

+0

Questo ha funzionato perfettamente per me, e ho dato un bernoccolo.Ma mi stavo chiedendo cosa significasse l'util? Il mio pensiero era Utility? –

+0

Sì o Utilità. – DrOverbuild

0

Creazione di classe Util a Swift:

  1. creare un nuovo file con il nome Util
  2. Crea il funzioni di classe: classe func funtionname :() -> {}

Exmaple:

importazione UIKit importazione Fondazione

class Util: NSObject { 


     //MARK: - SET USER LOGGED IN 
     class func set_IsUserLoggedIn(state : Bool) { 
      var userloggedin:  UserDefaults? 
      userloggedin  = UserDefaults.standard 
      userloggedin?.set(state, forKey: "IS_USER_LOGGED_IN") 
     } 


     //MARK: - GET USER LOGGED IN 
     class func get_IsUserLoggedIn() -> Bool { 

      var userloggedin:  UserDefaults? 
      userloggedin  = UserDefaults.standard 

      var checkUser:Bool? = false 
      checkUser   = userloggedin?.bool(forKey: "IS_USER_LOGGED_IN") 

      return checkUser! 
     } 



    } 

È possibile chiamare la funzione Util in qualsiasi file di classe come:

if Util.get_IsUserLoggedIn(){ 
     print("User is logged in") 

    } 
    else{ 
     print("User is not logged in") 
    } 
1

Il modo più rapido è quello di estendere UIViewController e aggiungere le funzioni lì.

Swift 3 Esempio:

extension UIViewController { 

    func roundAndFormatFloat(floatToReturn : Float, numDecimalPlaces: Int) -> String{ 
     let formattedNumber = String(format: "%.\(numDecimalPlaces)f", floatToReturn) 

     return formattedNumber 
    } 

    func foo() -> String { 
     return "foo" 
    } 

} 
Problemi correlati