在Swift中引用环境变量
有人知道如何在Swift中获取环境变量吗?是的,这是可能的。为此,请使用在Swift中引用环境变量,swift,environment-variables,Swift,Environment Variables,有人知道如何在Swift中获取环境变量吗?是的,这是可能的。为此,请使用ProcessInfo 简单的例子: let dic = ProcessInfo.processInfo.environment if dic["VAR"] != nil { } 除了Oleg提到的基于NSProcessInfo的方法外,您还可以使用标准的Cgetenv函数访问环境变量,如下所示: Swift 2.x: func getEnvironmentVar(name: String) -> String?
ProcessInfo
简单的例子:
let dic = ProcessInfo.processInfo.environment
if dic["VAR"] != nil {
}
除了Oleg提到的基于
NSProcessInfo
的方法外,您还可以使用标准的Cgetenv
函数访问环境变量,如下所示:
Swift 2.x:
func getEnvironmentVar(name: String) -> String? {
let rawValue = getenv(name)
guard rawValue != nil else { return nil }
return String(UTF8String: rawValue)
}
func getEnvironmentVar(_ name: String) -> String? {
guard let rawValue = getenv(name) else { return nil }
return String(utf8String: rawValue)
}
import Foundation
if let value = ProcessInfo.processInfo.environment["KEY"] {
...
}
Swift 3.0:
func getEnvironmentVar(name: String) -> String? {
let rawValue = getenv(name)
guard rawValue != nil else { return nil }
return String(UTF8String: rawValue)
}
func getEnvironmentVar(_ name: String) -> String? {
guard let rawValue = getenv(name) else { return nil }
return String(utf8String: rawValue)
}
import Foundation
if let value = ProcessInfo.processInfo.environment["KEY"] {
...
}
还可以使用setenv
功能设置环境变量:
func setEnvironmentVar(name: String, value: String, overwrite: Bool) {
setenv(name, value, overwrite ? 1 : 0)
}
我之所以提到设置变量的能力,是因为这是我所知道的在Xcode操场上工作时设置变量的唯一方法
我最近想看到一个奇怪的CGContext
错误的回溯,这个错误是我在操场上处理“实时”视图时遇到的。默认情况下,控制台中不显示回溯,因此我必须设置CG\u CONTEXT\u SHOW\u backtrace
环境变量以查看发生了什么:
setenv("CG_CONTEXT_SHOW_BACKTRACE", "1", 1)
此后,一切顺利。嗯,除了我得到的CGContext
错误之外,这是另一天的话题
希望这有帮助
p.S.上述功能需要导入
Darwin
模块Foundation
自动导入Darwin
,但我想我还是应该提到它。Swift 3及以上:
func getEnvironmentVar(name: String) -> String? {
let rawValue = getenv(name)
guard rawValue != nil else { return nil }
return String(UTF8String: rawValue)
}
func getEnvironmentVar(_ name: String) -> String? {
guard let rawValue = getenv(name) else { return nil }
return String(utf8String: rawValue)
}
import Foundation
if let value = ProcessInfo.processInfo.environment["KEY"] {
...
}
自Swift 3以来,NSProcessInfo已重命名为
ProcessInfo
。
方法processInfo()
已替换为属性processInfo
import Foundation
for (key, value) in ProcessInfo.processInfo.environment {
print("\(key): \(value)")
}
根据自动生成为项目模板的代码:
let variable=Environment.get(“变量”)??“或是达福尔特”
好的,运行应用程序的工作,您如何处理UI测试?这是一篇很好的文章,提供了有用的答案-如果您想为Xcode项目设置环境变量,可以编辑scheme>run>arguments部分,您可以在其中添加环境变量感谢setenv
提示。以前尝试使用Process()
和ProcessInfo.ProcessInfo
使其工作,但始终无法使环境粘住setenv
为我解决了这个问题。以下是苹果官方的API文档: