【问题标题】:Storing weather forecast data in Swift在 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”,因为它们会有所帮助。

标签: swift core-data struct realm weather-api


【解决方案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>()
}

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 2011-05-16
    • 1970-01-01
    • 2013-06-22
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2012-11-25
    相关资源
    最近更新 更多