2017-05-24 1 views
-1

Je veux utiliser 2 constante et ils doivent être initialisés à partir de la valeur de retour d'une fonction. Je veux utiliser ces deux constantes dans le même fichier et également la fonction et les constantes sont dans un même fichier.Initialisation d'une variable globale avec la valeur de retour de fonction

class myclass{ 

static var ip :String 
static var host :String 

init(ip :String, host :String) { 
    let myconstant = self.setEnvVariables() 

     let ip = myconstant.0 
     let host = myconstant.1 
} 


internal func setVariables() -> (String , String){ 
    let ip,host: String 

    if (some condition) != nil){ 
     ip = "127.0.0.1" 
     host = "http://youraddress.com" 
    } 
    else{ 
     ip = "10.12" 
     host = "http://myaddress.com" 
    } 
    return (ip,host) 
} 

Répondre

0

Je ne sais pas si je reçois ce que vous voulez, mais essayez ceci:

class MyClass { 

    static var ip: String! 
    static var host: String! 

    init() { 
     let (ip, host) = MyClass.setVariables() 

     MyClass.ip = ip 
     MyClass.host = host 
    } 

    private static func setVariables() -> (String , String) { 
     ... 
    } 
} 

Toutes les variables globales Swift/propriétés doivent être correctement initialisés. Cela implique que:

  • une valeur par défaut doit être affecté à quand déclarée;
  • ou il est déclaré facultatif, en utilisant nil comme valeur initiale (par exemple, String! ci-dessus).

Ou, si vous ne pas en utilisant optionals lorsque vous n'avez pas besoin (! Je ne), vous pouvez utiliser des propriétés constantes à la place:

class MyClass { 

    private static let ipHost = MyClass.setVariables() 

    static let ip = ipHost.0 
    static let host = ipHost.1 
} 

Cette seconde option améliore également votre conception du code puisque vous n'initialisez plus les variables globales à l'intérieur d'un initialiseur d'instance, ce qui n'est généralement pas la bonne approche.

+0

La première mise en œuvre fonctionne! aussi j'ai essayé la deuxième approche classe MyClass {private static laisser ipHost = setVariables() statique laisser ip = ipHost.0 hôte let statique = ipHost.1 } Mais il donne erreur Impossible d'utiliser membre d'instance ' setEnvVariables 'dans l'initialisateur de la propriété; les initialiseurs de propriétés s'exécutent avant que 'self' soit disponible –

+0

@KIFtest Vous avez raison! Je pensais que cette fonction était globale :-(Vous devez la déclarer 'static' et l'appeler en utilisant votre nom de classe comme préfixe.J'ai mis à jour ma réponse, veuillez réessayer;) –