Доступ к переменным среды в скрипте Swift с использованием GLibc [duplicate]

function toHHMMSS(seconds) {
    var h, m, s, result='';
    // HOURs
    h = Math.floor(seconds/3600);
    seconds -= h*3600;
    if(h){
        result = h<10 ? '0'+h+':' : h+':';
    }
    // MINUTEs
    m = Math.floor(seconds/60);
    seconds -= m*60;
    result += m<10 ? '0'+m+':' : m+':';
    // SECONDs
    s=seconds%60;
    result += s<10 ? '0'+s : s;
    return result;
}

Примеры

    toHHMMSS(111); 
    "01:51"

    toHHMMSS(4444);
    "01:14:04"

    toHHMMSS(33);
    "00:33"
40
задан ColGraff 25 March 2016 в 13:13
поделиться

4 ответа

Наряду с методом, описанным Олегом 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.

Недавно я хотел увидеть обратную линию для странной ошибки CGContext, которую я получал при работе с «живым» представлением на игровой площадке. По умолчанию backtrace не отображается в консоли, поэтому мне пришлось установить переменную среды CG_CONTEXT_SHOW_BACKTRACE, чтобы увидеть, что было:

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

. После этого было плавное плавание. Ну, кроме ошибки CGContext, которую я получал, но это тема для другого дня.

Надеюсь, что это поможет!

P.S. Для выполнения указанных функций требуется импортировать модуль Darwin. Foundation автоматически импортирует Darwin, но я думал, что должен упомянуть об этом.

21
ответ дан Ben Stock 27 August 2018 в 16:34
поделиться

Swift 3 и выше:

import Foundation

if let value = ProcessInfo.processInfo.environment["key"] {
    ...
}
49
ответ дан emlai 27 August 2018 в 16:34
поделиться

Да, возможно. Используйте для этого ProcessInfo.

Простой пример:

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

}
11
ответ дан Martin 27 August 2018 в 16:34
поделиться
4
ответ дан Roman Shamritskiy 27 August 2018 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: