2014-10-08 28 views
10

Chciałbym zaimplementować zestaw funkcji, które będą wywoływane przez różne kontrolery widoku w mojej aplikacji.W XCODE/Swift, w jaki sposób mogę utworzyć pojedynczą funkcję, którą można wywołać z różnych kontrolerów widoku?

Jakie jest najlepsze podejście do tego?

Przykładem funkcji mają być stosowane w całej aplikacji jest ten, który zwraca sformatowany Float jako wyrażenie:

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

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

} 
+0

Twoje pytanie jest zbyt ogólnikowe - podać kilka przykładów tego, co powinien zrobić funkcje. Czy powinny one pracować z danymi zawartymi/obsługiwanymi przez kontroler widoku? Lub przez jego poglądy? – Antonio

+3

Czy brałeś pod uwagę metody klasowe? A może singleton? – Clafou

+0

Zaktualizowałem pytanie, aby dodać przykładową funkcję, która musi być używana w różnych widokach w aplikacji Antonio. Clafou, nigdy nie słyszałem o singletonie, ale mogłem zaimplementować funkcję w klasie i przywrócić klasę formatów już sformatowanych. Dobry pomysł! – user3535074

Odpowiedz

27

Proponuję utworzenie nowego pliku o nazwie Util.swift i wklej na tę funkcję ten plik. To co Util.swift wyglądałby następująco:

import UIKit 

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

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

} 

można umieścić inne funkcje i stałe, których potrzebujesz w Util.swift. Aby połączyć je w kontrolerze widoku, to zrobić:

var str = roundAndFormatFloat(float, numDecimalPlaces: decimalPlaces) 

Oto kolejna opcja. Utwórz kolejną klasę o nazwie Util i umieścić tę funkcję w nie jako funkcja klasy:

import UIKit 

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

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

    } 
} 

Wywołanie to będzie wyglądać następująco:

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

Można dodać inne metody klasy tutaj, że trzeba użyć globalnie. Zauważ, że nie możesz tworzyć globalnie dostępnych zmiennych ani stałych, ponieważ zmienne klasy i stałe nie zostały jeszcze zaimplementowane w Swift.

+1

To fantastyczne. Miałem nadzieję, że uda mi się stworzyć osobny plik. Wielkie dzięki. – user3535074

+0

To zadziałało idealnie dla mnie, a ja nadałem mu guza.Ale zastanawiałem się, co Util ma oznaczać? Moja myśl była użyteczna? –

+0

Tak lub Narzędzia. – DrOverbuild

0

Tworzenie klasy Util w Swift:

  1. Utwórz nowy plik o nazwie Util
  2. Stwórz funkcje klasy: klasy funkcjono funtionname :() -> {}

Exmaple:

import UIKit import Fundacja

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



    } 

można wywołać funkcję Util w dowolnym pliku klasy jak:

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

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

Swift sposób jest rozszerzenie UIViewController i dodać tam swoje funkcje.

Swift 3 Przykład:

extension UIViewController { 

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

     return formattedNumber 
    } 

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

}