参考Swift中的环境变量

Rei*_*son 60 environment-variables swift

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

eml*_*lai 77

Swift 3及以上:

import Foundation

if let value = ProcessInfo.processInfo.environment["key"] {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 小心。当您从 Xcode 存档或启动应用程序时,这些环境变量不会显示。 (4认同)

Ben*_*ock 28

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

Swift 2.x:

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

Swift 3.0:

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

也可以使用以下函数设置环境变量setenv:

func setEnvironmentVar(name: String, value: String, overwrite: Bool) {
    setenv(name, value, overwrite ? 1 : 0)
}
Run Code Online (Sandbox Code Playgroud)

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

我最近想看到一个回溯,因为CGContext我在操场上使用"实时"视图时遇到了一个奇怪的错误.默认情况下,回溯未显示在控制台中,因此我必须设置CG_CONTEXT_SHOW_BACKTRACE环境变量以查看其中的内容:

setenv("CG_CONTEXT_SHOW_BACKTRACE", "1", 1)
Run Code Online (Sandbox Code Playgroud)

在那之后,一帆风顺.好吧,除了CGContext我得到的错误,但这是另一天的主题.

希望这可以帮助!

PS以上功能需要Darwin导入模块.Foundation自动进口Darwin,但我想我应该提到它.


Ole*_*huk 12

对的,这是可能的.使用ProcessInfo了点.

简单的例子:

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

}
Run Code Online (Sandbox Code Playgroud)

  • 好的,运行应用程序的工作,你用 UI 测试做什么? (2认同)

Rom*_*kiy 6

自从Swift 3 NSProcessInfo改名为ProcessInfo.并且方法processInfo()已被属性替换processInfo.

import Foundation

for (key, value) in ProcessInfo.processInfo.environment {
    print("\(key): \(value)")
}
Run Code Online (Sandbox Code Playgroud)