【问题标题】:Defining Global variables with conditional compiling in Swift在 Swift 中使用条件编译定义全局变量
【发布时间】:2017-01-25 00:22:25
【问题描述】:

我想使用全局变量来根据当前的构建配置(开发、生产)定义我的应用的 API 基本路径。 这些是当前的方法:

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

【问题讨论】:

  • 将所有与环境相关的变量提取到plist 文件中会是一个更好的设计。
  • 是否有任何方法可以在 .plist 文件中定义相同的变量并根据构建配置(调试、暂存、发布)提取它而不使用代码?我正在考虑使用 .plist 提取的常量扩展答案中提供的代码
  • 是的,您为每个构建配置创建一个 plist,并更改每个包中包含的一个 plist
  • 好的,非常感谢。您如何看待建议的答案?

标签: ios swift global-variables preprocessor


【解决方案1】:

请试试这个。

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

    }

希望这能解决您的困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多