Latest 0.1.7
Homepage https://github.com/YaxinCheng/WeatherKit
License MIT
Platforms ios 10.0
Authors

WeatherKit: A simple concise kit for weather
Cocoapods
Swift2.x
Swift3.x

WeatherKit is simple kit for weather information in Swift

Features:

  • Weather/Forecasts for locations
  • Weather/Forecasts for cities by name
  • Unit conversions
  • City searching and location parsing

Requirements:

  • iOS 10.0+
  • Xcode 8+

Installation:

WeatherKit can be installed through Cocoapods or manual import.

Cocoapods:

$ gem install cocoapods

After installation of cocoapods, create a file named Podfile at the root directory of the project:

For swift3:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'WeatherKit', '~> 0.1.7'
end

For swift2.3:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'WeatherKit', '~> 0.1.5-swift2.3'
end

For swift2.2:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'WeatherKit', '~> 0.1.4'
end

Then, run the following command:

$ pod install

User Manual:

Kit imports

import WeatherKit

WeatherStation.swift

WeatherStation is the interface which retrieves weather/forecast information
The contructor accepts 4 units parameters with default values, which will be used to convert weather/forecast information

Constructor:

public init(temperatureUnit: TemperatureUnit = .celsius, distanceUnit: DistanceUnit = .mi, directionUnit: DirectionUnit = .direction, speedUnit: SpeedUnit = .mph)

Load weather/forecasts for a location

let station = WeatherStation()
station.weather(location: someLocation) { result in 
     switch result {
     case .Success(let json): // Get a single weather json
          // Do something
     case .Failure(let error):
          // Error handling
     }
}
station.forecast(location: someLocation) { result in
     switch result {
     case .Success(let jsons): // Get an array of forecast json
          // Do something
     case .Failure(let error):
          // Error handling
     }
}

Load weather/forecasts for a city

With default values for province and country, so the two parameters can be skipped
But searching with those two parameters can increase the accuracy of search

let station = WeatherStation()
station.weather(city: "cityName", province: "provinceName", country: "countryName") { result in
     switch result {
     case .Success(let json): // Get a single weather json
          // Do something
     case .Failure(let error):
          // Error handling
     }
}
station.weather(city: "cityName") { result in  // The province and country can be skipped
     switch result {
     case .Success(let json): // Get a single weather json
          // Do something
     case .Failure(let error):
          // Error handling
     }
}
station.forecast(city: "cityName", province: "provinceName", country: "countryName") { result in
     switch result {
     case .Success(let jsons): // Get an array of forecast json
          // Do something
     case .Failure(let error):
          // Error handling
     }
}
Content of JSON:

There are two JSON types: weather& forecast. The details are listed below

/*weather json*/
weatherJSON["temperature"] // Double value about the weather temperature
weatherJSON["condition"] // String value about the weather condition
weatherJSON["conditionCode"] // Int value, code of the condition
weatherJSON["windChill"] // Double value about the wind temperature
weatherJSON["windSpeed"] // Double value about the wind speed
weatherJSON["windDirection"] // Double value about the direction of winds
weatherJSON["humidity"] // String value about the humidity
weatherJSON["visibility"] // Double value about the visibility
weatherJSON["pressure"] // String value about the pressure
weatherJSON["trend"] // String value about the pressure trend
weatherJSON["sunrise"] // NSDateComponents value
weatherJONS["sunset"] // NSDateComponents value

/*forecast json*/
forecastJSON["high"] // Double value about the highest temperature
forecastJSON["low"] // Double value about the lowest temperature
forecastJSON["date"] // String value about the forecast date
forecastJSON["text"] // String value about the forecast condition
forecastJSON["day"] // String value about the weekday the forecast is for
forecastJSON["code"] // String value about the weather condition code

Cache clear:

By default, weather station keeps caches which speed up the loading process
Normally, caches will be replaced and auto-cleared
But weather station also offers the option to clear cache manually

let station = WeatherStation()
station.clearCache()

CityLoader.swift

CityLoader is the main access for loading city information and parsing location information
The constructor accepts no parameters, which makes CityLoader easier to be instanced

Load city information:

With default values for province and country, so the two parameters can be skipped
But searching with those two parameters can increase the accuracy of search

Constructor:

public init() { ... }
let loader = CityLoader()
loader.loadCity(city: "cityName", province: "provinceName", country: "countryName") { result in
     // result is an array of city JSONs
     // If no city matches the description, or any error happens, result is empty
}

Another way to load a city is searching by WOEID, which is a unique value used to locate a city

let loader = CityLoader()
loader.loadCity(woeid: "SomeWOEID") { result in 
     // result is an optional typed JSON (Dictionary<String, AnyObject>?)
     // If no city matches the woeid, or any error happens, then the result == nil
}

#### Load sunrise& sunset information:
City loader can also check sunrise& sunset time for a city with the woeid, the result will be given back as a tuple of two optional NSDateComponents <br>
``` swift
let loader = CityLoader()
loader.dayNight(woeid: "someWOEID") { sunrise, sunset in
     // sunrise and sunset can be nil
}

Location parse:

City loader can parse the information of a CLLocation value, and return a city json back.

let loader = CityLoader()
loader.locationParse(location: someLocation) { city in 
     // city can be nil
     // if city is not nil, city is a Dictionary<String, AnyObject>
}
Content of JSON:

Below is the content of a city json

cityJSON["name"] //String value about the name of the city
cityJSON["admin1"] //String value about the name of the province or state
cityJSON["country"] //String  value about the name of the country
cityJSON["woeid"] //String value about the woeid of the city
cityJSON["centroid"]?["latitude"] //String value about the latitude information of the city
cityJSON["centroid"]?["longitude"] //String value about the longitude information of the city
cityJSON["timezone"] //String value about the timezone label of the city

License

WeatherKit is released under the MIT license. See LICENSE for details.

Latest podspec

{
    "name": "WeatherKit",
    "version": "0.1.7",
    "summary": "A simple swift kit for weather information, forecasts, and city searching. All weather information is from Yahoo!",
    "description": "A small concise Swift kit for retrieving weather info. No extra dependency needed. All weather information are from Yahoo! Weather. You can get weather and forecasts info in your local city. And you can even get info for any city you choose to see.",
    "homepage": "https://github.com/YaxinCheng/WeatherKit",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Yaxin Cheng": "[email protected]"
    },
    "platforms": {
        "ios": "10.0"
    },
    "source": {
        "git": "https://github.com/YaxinCheng/WeatherKit.git",
        "tag": "0.1.7"
    },
    "source_files": [
        "WeatherKit",
        "WeatherKit/**/*.{h,swift}"
    ]
}

Pin It on Pinterest

Share This