WXKDarkSky
此 Swift 包是在 Dark Sky API 上构建的 Codable
层,用于快速轻松访问 API 响应对象。它非常直观,直接模仿了 Dark Sky API 文档。我们在 Loop Weather 中使用它,并认为其他人可能会发现它很有用。
它还有一些有用的基本网络功能,用于从 Dark Sky API 请求数据。这可能不会完全满足您的网络需求,但它是用纯 Swift 实写的,因此您不必担心相互冲突的依赖项或类似的问题。如果此包中的网络功能不能满足您的需求,您可以自由地进行自己的网络处理,并将响应传递给 Codable 类,即 DarkSkyResponse
。
兼容性
WXKDarkSky 应该与 Swift 5 完全兼容。
安装
Swift 包管理器(推荐)
当然,您需要在 Swift 包管理器中将此包添加为依赖项。
对于 Swift 4 的包管理器工具
.package(url: "https://github.com/loopwxservices/WXKDarkSky.git", from: "3.1.0")
然后,确保在 targets
部分中将 "WXKDarkSky"
添加为依赖项。
使用 CocoaPods 添加 WXKDarkSky,操作非常简单。只需将以下行添加到您的 Podfile 中:
通过 CocoaPods 添加 WXKDarkSky 非常简单。只需将此行添加到您的 Podfile 中
pod 'WXKDarkSky', '~> 3.1.0'
Carthage
我们目前不提供通过 Carthage 安装的官方支持。但是,它有很好的机会开箱即用。
Manual
只需从 Sources 文件夹取出源文件,并将它们拖放到您的 Xcode 项目中,然后将它们添加到任何相关的目标中。只需确保 Dark Sky API 发生更改时保持更新。
Usage
DarkSkyResponse
对象结构应与文档中记录的响应格式完全匹配,以便于参考。根据文档,几乎所有的值都是可选项,即使通常情况下它们会被包括。绝对不假设存在天气数据!
With networking
重要的!在客户端运行代码时,请勿通过 WXKDarkSky 的网络代码发送请求。这样做会让您的 API 密钥面临泄露的风险。最好是使用您自己的网络代码,从自定义服务器端解决方案中获取 Dark Sky 数据,该解决方案只是简单地将 Dark Sky 输出重新提供给客户端,这样您的 API 密钥就不会被暴露。(如果您的项目允许,您甚至可以使用 WXKDarkSky 的网络代码与服务器端 Swift 框架如 Vapor 或 Perfect 一起使用。)
WXKDarkSky 包含了基本网络功能,用于从Dark Sky API加载数据。您可以通过使用 DarkSkyRequest(key:).loadData
方法向API发起请求。以下是一个示例:
let request = DarkSkyRequest(key: "YOURKEYHERE")
let point = DarkSkyRequest.Point(latitude: 37.4, -96.8)
request.loadData(point: point) { (data, error) in
if let error = error {
// Handle errors here...
} else if let data = data {
// Handle the received data here...
}
}
在这个点之后,数据处理方式与“无网络”部分相同。
请求配置
该方法支持两个额外的参数用于配置请求。它接受一个可选的 time
参数,默认值为nil,您可以将一个 Date
对象传递给它以进行时光机请求。
它还接受一个可选的 options
参数,您可以设置以下任意选项:
exclude
:要排除在请求中的数据块。extendHourly
:是否将每小时预报扩展到168小时而不是48小时。language
:在响应中使用的语言。units
:在响应中使用的单位。
可以初始化一个包含上述四个选项中的任何组合的 Options
对象。如果您不包括任何一个,它将使用默认设置。您还可以使用 Options.defaults
来访问默认选项(例如,Options.defaults.extendHourly
)。以下是一个示例:
let options = DarkSkyRequest.Options(exclude: [.minutely, .alerts], extendHourly: true, language: .german, units: .si)
DarkSkyRequest.loadData(point: point, options: options) { (response, error) in
if let response = response {
// Successful request. Sample to get the current temperature...
if let currently = response.currently {
if let temperature = currently.temperature {
print("Current temperature: " + String(describing: temperature))
}
}
} else if let error = error {
// Encountered an error, handle it here...
}
}
如前所述,处理结果的方法与“无网络”部分相同。
无网络
如果您使用其他网络代码,使用 WXKDarkSky 仍然非常简单。
if let response = DarkSkyResponse(data: data) {
// Sample to get the current temperature
if let currently = response.currently {
if let temperature = currently.temperature {
print("Current temperature: " + String(describing: temperature))
}
}
}
贡献
如果Dark Sky API发生了变化,我们还没有来得及更新WXKDarkSky,请随意开一个问题或pull request,我们将及时处理。
如果您有关于使用WXKDarkSky的问题,请通过打开问题或发送电子邮件至help {at} loopweather {dot} services。我们将很高兴为您提供帮助!
WXKDarkSky 的使用
如果您已经使用WXKDarkSky完成了某个项目,我们非常愿意看到您的成果!只需将项目名称和链接(以及您希望包含的其他任何有趣内容)通过电子邮件发送至 help {at} loopweather {dot} services,我们将在下方列出。如果您项目的机密性非常高,您不愿意分享也可以,我们项目组自己也有保密项目。
许可/法律
本软件包遵循MIT许可证,允许您在遵守暗天规则的前提下使用本Swift软件包做几乎任何事情,但不能因为任何故障而起诉我们,前提是您要为我们提供认可。我们希望有人会发现它是有用的。
关于法律事宜:我们与The Dark Sky Company, LLC没有任何关联。另外,“暗天”是他们公司的商标,不是我们公司的。