使用函数返回值初始化全局变量

时间:2017-05-24 21:28:19

标签: swift initialization global-variables

我想使用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)
}

1 个答案:

答案 0 :(得分: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
}

第二个选项还改进了代码设计,因为您不再在实例初始化程序中初始化全局变量,这通常不是正确的方法。