在 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 中存储天气预报数据的主要内容,如果未能解决你的问题,请参考以下文章