在 Swift 中存储天气预报数据

Posted

技术标签:

【中文标题】在 Swift 中存储天气预报数据【英文标题】:Storing weather forecast data in Swift 【发布时间】:2019-06-17 20:49:28 【问题描述】:

我想做一个需要大量天气预报数据的应用程序,三个城市,7天,24小时,每小时预测六个值。

我正在使用 Dark Sky API 和名为 ForecastIO 的 pod。

我应该使用什么来存储?核心数据还是领域?有人告诉我,Realm 使用起来更容易,而且效率也更高。我查看了代码,对于初学者来说,它更容易,而且不处理任何图表也是加分项,但如果需要完成,我会研究它。我应该如何构建它?

我试过了,但 Realm 只接受基本数据类型,所以它不起作用。

HourlyWeather.swift

import Foundation
import RealmSwift

class HourlyWeather: Object 
    @objc dynamic var temperature: Double = 0
    @objc dynamic var wind: Double = 0
    @objc dynamic var precip: Double = 0
    @objc dynamic var humidity: Double = 0
    @objc dynamic var uvIndex: Int = 0
    @objc dynamic var icon: String = ""

DailyWeather.swift

import Foundation
import RealmSwift

class DailyWeather: Object 
    @objc dynamic var day = [HourlyWeather()] // I understand that this is a no-no for Realm

CityWeather.swift

import Foundation
import RealmSwift

class CityWeather: Object 
    @objc dynamic var city = [DailyWeather()] // The same

我希望这段代码可以作为

访问
City.day[index].hour[index].temperature 

例如

【问题讨论】:

欢迎来到 Stack Overflow!没有必要告诉我们您是新手或没有经验,因为我们不在乎。我们关心的是你是否完成了研究,尝试了多种方法来解决问题,然后写出了一个遵循指导方针的好问题。请参阅“How to Ask”以及链接页面和“mcve”,因为它们会有所帮助。 【参考方案1】:

当您想将 Realm 对象的集合存储为另一个对象的属性时,您需要使用 List 而不是 Array。有关更多信息,请阅读官方文档的Many-to-many relationships 部分(但我建议您阅读整个文档,因为它为使用 Realm 提供了一个非常好的起点)。

class DailyWeather: Object 
    let day = List<HourlyWeather>()


class CityWeather: Object 
    let city = List<DailyWeather>()

【讨论】:

一个小的补充是欢迎你在你的 Realm 对象中使用数组,但是它们不会被 Realm 管理——它们只是普通的数组。例如如果您在问题中加载 DailyWeather 对象,则 day Array 将是一个空数组(可以手动填充)。正如大卫所说,如果您想要管理对象和关系,请使用列表。如果你想要一个数组,你可以松开 @objc dynamic 并把它变成一个普通的 var。【参考方案2】:

您需要声明List 类型的属性。见Many to Many docs

class DailyWeather: Object 
   let city = List<DailyWeather>()

【讨论】:

以上是关于在 Swift 中存储天气预报数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift JSON 天气问题

具体日期的天气? [关闭]

在 swift 4 中获取 json 有啥问题?

❤️Android Stduio实现一个天气预报APP❤️

大数据基础学习

大数据MapReduce 编程实战