2017-05-24 132 views
-1

我想使用2個常量,它們應該從函數的返回值初始化。我想在同一個文件中使用這兩個常量,並且函數和常量也是相同的文件。使用函數返回值初始化一個全局變量

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

回答

0

不知道如果我得到你想要的東西,但試試這個:

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) { 
     ... 
    } 
} 

所有SWIFT全局變量/屬性必須正確初始化。這意味着:

  • 一個默認聲明時值必須分配給它;
  • 或它被宣佈爲可選,使用nil作爲其初始值(例如,上面的String!)。

或者,如果不喜歡使用自選當你不需要(!我不),你可以使用恆定的屬性,而不是:

class MyClass { 

    private static let ipHost = MyClass.setVariables() 

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

第二種選擇也提高了你代碼設計,因爲您不再初始化全局變量內部的實例初始化程序,這通常不是正確的方法。

+0

第一次實施有效!我也嘗試了第二種方法MyClass類{ 私有靜態讓ipHost = setVariables() 靜態IP就讓= ipHost.0 靜態令主機= ipHost.1 }但它給錯誤 不能使用實例成員「屬性初始值設定項中的「setEnvVariables」;屬性初始值設定項在'self'可用之前運行 –

+0

@KIFtest你是對的!我認爲這個函數是全局的:-(你需要聲明它是'static',並用你的類名作爲前綴來調用它,我更新了我的答案;請再試一次;) –