参考Swift中的环境变量

时间:2016-03-25 12:05:26

标签: swift environment-variables

有人知道如何在Swift中获取环境变量吗?

5 个答案:

答案 0 :(得分:66)

Swift 3及以上:

import Foundation

if let value = ProcessInfo.processInfo.environment["key"] {
    ...
}

答案 1 :(得分:27)

与Oleg提到的基于NSProcessInfo的方法一起,您可以使用标准C getenv函数访问环境变量,如下所示:

Swift 2.x:

func getEnvironmentVar(name: String) -> String? {
    let rawValue = getenv(name)
    guard rawValue != nil else { return nil }
    return String(UTF8String: rawValue)
}

Swift 3.0:

func getEnvironmentVar(_ name: String) -> String? {
    guard let rawValue = getenv(name) else { return nil }
    return String(utf8String: rawValue)
}

使用setenv函数设置环境变量也是可能的:

func setEnvironmentVar(name: String, value: String, overwrite: Bool) {
    setenv(name, value, overwrite ? 1 : 0)
}

我提到设置变量的能力的原因是因为这是我在Xcode Playground中工作时设置变量的唯一方法。

我最近想看到在操场上使用“实时”视图时遇到的奇怪CGContext错误的回溯。默认情况下,回溯未显示在控制台中,因此我必须设置CG_CONTEXT_SHOW_BACKTRACE环境变量以查看出现的情况:

setenv("CG_CONTEXT_SHOW_BACKTRACE", "1", 1)
之后,一帆风顺。好吧,除了我遇到的CGContext错误,但这是另一天的主题。

希望这有帮助!

P.S。上述功能需要导入Darwin模块。 Foundation自动导入Darwin,但我认为我应该提及它。

答案 2 :(得分:11)

是的,这是可能的。请使用ProcessInfo

简单示例:

let dic = ProcessInfo.processInfo.environment
if dic["VAR"] != nil {

}

答案 3 :(得分:5)

由于Swift 3 NSProcessInfo已重命名为ProcessInfo。 方法processInfo()已替换为属性processInfo

import Foundation

for (key, value) in ProcessInfo.processInfo.environment {
    print("\(key): \(value)")
}

答案 4 :(得分:-1)

来自 Vapor 自动生成为项目模板的代码:

let variable = Environment.get("VARIABLE") ?? "or-the-dafault"