Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中引用环境变量_Swift_Environment Variables - Fatal编程技术网

在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?

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

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

简单的例子:

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

}

除了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)
}
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文档: