2016-09-16 135 views
0

我想根据当前的构建配置(dev,production)使用全局变量来定义我的应用程序的API基本路径。 这些都是当前的方法:在Swift中使用条件编译来定义全局变量

1)

 struct ApiSettings { 

    static let API_DEV_BASEPATH = "http://dev.myapp.com" 
    static let API_PRODUCTION_BASEPATH = "http://prod.myapp.com" 

    // Return the basepath for the current app runtime mode 
    static var API_BASEPATH:String { 

     var bPath: String! 
     #if DEBUG 
      bPath = API_DEV_BASEPATH 
     #else 
      bPath = API_PRODUCTION_BASEPATH 
     #endif 
     return bPath 
    } 
} 

2) (这里我定义了一个临时环境太)

#if DEBUG 
let API_BASEPATH = "http://dev.app.com" 
#elseif STAGING 
let API_BASEPATH = "http://staging.app.com" 
#elseif RELEASE 
let API_BASEPATH = "http://production.app.com" 
#endif 

但是当我尝试在我的应用程序使用API​​_BASEPATH的编译器抱怨“未解析的标识符”

我不确定哪个最优雅的解决方案被采用。 PS。我正在使用Swift3

+0

这将是一个更好的设计,以提取所有环境相关的变量到'plist'文件。 – Alexander

+0

有什么方法可以在.plist文件中定义相同的变量,并根据构建配置(调试,分段,发布)提取它,而无需使用代码?我正在考虑扩展由.plist提供的常量中提供的代码。 – Claus

+0

是的,你为每个构建配置一个plist,并且更改哪个包含在每个包中,哪一个包含 – Alexander

回答

1

请试试这个。

static var API_BASEPATH:String { 
     get { 
      var bPath: String! 
      #if DEBUG 
       bPath = API_DEV_BASEPATH 
      #else 
       bPath = API_PRODUCTION_BASEPATH 
      #endif 
      return bPath 
     } 

    } 

希望这会解决您的困惑。