AvWeather

AvWeather 是一个 Swift 包,允许您从航空气象中心(网址:aviationweather.gov)检索和使用数据。

用法

(示例展示了 Metar,但 TAF 同样可以使用)

import AvWeather

let avWeatherClient = AWCClient()

// send a request for METAR data for Boston Logan Airport (KBOS)
avWeatherClient.send(MetarRequest(forStation: "KBOS")) { response in 
    switch response {
    case .success(let metars):
        // do something with new METAR data
        print(metars[0].rawText)
        
    case .failure(let error):
        // request failed
        print(error.localizedDescription)
    }
}

// send a request for METAR data at multiple stations
avWeatherClient.send(MetarRequest(forStations: ["KBOS", "KORD", "KLAX"])) { response in
    switch response {
    case .success(let metars):
        // do something with new METAR data
        print(metars[0].rawText)
        
    case .failure(let error):
        // request failed
        print(error.localizedDescription)
    }
}

Sigmets(重要气象情报)

AWC 区分国际和美国 Sigmets。 AvWeather 都可以检索它们,并由一个通用的 Sigmet 类表示,尽管具有一些不同的属性。 有关详细信息,请参阅 Sigmet.swift 中的实现。

import AvWeather

let weatherClient = AWCClient()

//Configure the request for International or US Sigmets
weatherClient.send(SigmetRequest(type: .international)) { [weak self] response in
    DispatchQueue.main.async {
        switch response {
        case .success(let sigmets):
            //Do something with sigmets
            ...
            
        case .failure(let error):
            // request failed
            let msg = AWCClient.messageIn(error)
            print(msg)
        }
    }
}

Async/Await(异步/等待)

AvWeather 也可以在 Swift Async/Await 并发方案中使用

(示例展示了 TAF,但 Metar 和 sigmets 同样可以使用)

// Instantiate a client
let client = AWCClient()
// Configure the request using 1 or more stations
let request = TAFRequest(forStations: ["ESSA", "ENGM", "GCLP", "LFPG", "KJFK", "KLAX"], mostRecent: true)
do {
    let tafs = try await client.send(request)
    // do something with TAF data
    print(tafs[0].rawText)
} catch {
    // An error was thrown
    print("Error thrown getting tafs: \(AWCClient.messageIn(error))")
}