在Swift中存储天气预报数据

时间:2019-06-17 20:49:28

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

我想创建一个需要大量天气预报数据,每小时预报三个城市,七天,二十四小时和六个值的应用程序。

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

我应该使用什么存储? CoreData还是Realm?有人告诉我,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 

例如

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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