2016-03-25 19 views

Trả lời

11

Có thể thực hiện được. Sử dụng ProcessInfo cho điều đó.

đơn giản ví dụ:

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

} 
+0

Ok, mà làm việc trên ứng dụng đang chạy, bạn làm gì với Kiểm tra giao diện người dùng? – Maetschl

18

Cùng với sự NSProcessInfo phương pháp dựa trên đề cập bởi Oleg, bạn có thể truy cập các biến môi trường bằng cách sử dụng tiêu chuẩn C getenv chức năng, như vậy:

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

Nó cũng có thể thiết biến môi trường bằng cách sử dụng setenv chức năng:

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

Lý do tôi đề cập đến khả năng thiết lập các biến là bởi vì đó là cách duy nhất tôi biết để thiết lập các biến khi làm việc trong Xcode Playground.

Gần đây tôi đã muốn thấy một dấu backtrace cho một lỗi lạ CGContext tôi đã nhận được khi làm việc với chế độ xem "trực tiếp" trong sân chơi. Theo mặc định, các vết lùi không được hiển thị trong giao diện điều khiển, vì vậy tôi đã phải đặt biến CG_CONTEXT_SHOW_BACKTRACE môi trường để xem những gì đã lên:

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

Sau đó, nó là thuận buồm xuôi gió. Vâng, khác với lỗi CGContext tôi đã nhận được, nhưng đó là một chủ đề cho một ngày khác.

Hy vọng điều này sẽ hữu ích!

P.S. Các chức năng trên yêu cầu phải nhập mô-đun Darwin. Foundation tự động nhập Darwin, nhưng tôi nghĩ tôi nên đề cập đến nó.

37

Swift 3 trở lên:

import Foundation 

if let value = ProcessInfo.processInfo.environment["key"] { 
    ... 
} 
3

Từ Swift 3 NSProcessInfo đã được đổi tên thành ProcessInfo. Và phương pháp processInfo() đã được thay thế bằng thuộc tính processInfo.

import Foundation 

for (key, value) in ProcessInfo.processInfo.environment { 
    print("\(key): \(value)") 
} 
Các vấn đề liên quan