有人知道如何在Swift中获取环境变量吗?
答案 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"