Referring to Environment Variables in Swift

后端 未结 4 1310
野的像风
野的像风 2020-12-08 13:00

Does anybody know how I can grab an environment variable in Swift?

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-08 13:11

    Along with the NSProcessInfo-based method mentioned by Oleg, you can access environment variables using the the standard C getenv function, like so:

    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)
    }
    

    It's also possible to set environment variables using the setenv function:

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

    The reason I mention the ability to set variables is because it's the only way I know of to set variables when working in an Xcode Playground.

    I recently wanted to see a backtrace for a strange CGContext error I was getting when working with a "live" view in a playground. By default, the backtrace isn't shown in the console, so I had to set the CG_CONTEXT_SHOW_BACKTRACE environment variable to see what was up:

    setenv("CG_CONTEXT_SHOW_BACKTRACE", "1", 1)
    

    After that, it was smooth sailing. Well, other than the CGContext error I was getting, but that's a topic for another day.

    Hope this helps!

    P.S. The above functions require the Darwin module to be imported. Foundation automatically imports Darwin, but I thought I should mention it nonetheless.

提交回复
热议问题