// // WeatherModel.swift // Twear // // Created by yangbin on 2021/12/8. // import UIKit import HandyJSON import SwiftDate enum WeatherType: Int, HandyJSONEnum { case sunny = 0 case overcast = 1 case rain = 2 case snow = 3 } class AMapWeatherModel: NSObject, HandyJSON { var date: Date? var nighttemp: Int = 0 var daytemp: Int = 0 var dayweather: String = "" required override init() { } } class WeatherModel: NSObject, HandyJSON { var city: String = "" var highest: Int = -100 var lowest: Int = -100 var type: WeatherType = .sunny var date: Date? var text: String = "" var icon: String { get { // switch type { // case .sunny: // return "weather_sunny" // case .overcast: // return "weather_cloudy" // case .rain: // return "weather_rain" // case .snow: // return "weather_snow" // } switch text { case "晴", "少云", "晴间多云": return "weather_sunny" case "阴", "多云": return "weather_cloudy" case "阵雨", "强阵雨", "雷阵雨", "强雷阵雨", "雷阵雨伴有冰雹", "小雨", "中雨", "大雨", "极端降雨", "毛毛雨/细雨", "细雨", "毛毛雨", "暴雨", "大暴雨", "特大暴雨", "冻雨", "小到中雨", "中到大雨", "大到暴雨", "暴雨到大暴雨", "大暴雨到特大暴雨", "雨": return "weather_rain" case "小雪", "中雪", "大雪", "暴雪", "雨夹雪", "雨雪天气", "阵雨夹雪", "阵雪", "小到中雪", "中到大雪", "大到暴雪", "雪": return "weather_snow" default: return "weather_sunny" } } } init(city: String, highest: Int, lowest: Int, type: WeatherType) { super.init() self.city = city self.highest = highest self.lowest = lowest self.type = type } init(city: String, tempMin: String, tempMax: String, textDay: String) { super.init() self.city = city self.highest = Int(tempMax) ?? 0 self.lowest = Int(tempMin) ?? 0 self.text = textDay switch textDay { case "晴", "少云", "晴间多云": self.type = .sunny self.text = "晴" case "阴", "多云": self.type = .overcast self.text = "多云" case "阵雨", "强阵雨", "雷阵雨", "强雷阵雨", "雷阵雨伴有冰雹", "小雨", "中雨", "大雨", "极端降雨", "毛毛雨/细雨", "细雨", "毛毛雨", "暴雨", "大暴雨", "特大暴雨", "冻雨", "小到中雨", "中到大雨", "大到暴雨", "暴雨到大暴雨", "大暴雨到特大暴雨", "雨", "小雨-中雨", "中雨-大雨", "大雨-暴雨", "暴雨-大暴雨", "大暴雨-特大暴雨": self.type = .rain self.text = "雨" case "小雪", "中雪", "大雪", "暴雪", "雨夹雪", "雨雪天气", "阵雨夹雪", "阵雪", "小到中雪", "中到大雪", "大到暴雪", "雪", "小雪-中雪", "中雪-大雪", "大雪-暴雪": self.text = "雪" self.type = .snow default: self.text = "阴" self.type = .sunny } } class func dailyToWeather(_ array: [Daily], city: String) -> [WeatherModel] { var weatherArray: [WeatherModel] = [] for daily in array { weatherArray.append(WeatherModel(city: city, tempMin: daily.tempMin, tempMax: daily.tempMax, textDay: daily.textDay)) } return weatherArray } class func aMapWeather(_ array: [AMapWeatherModel], city: String) -> [WeatherModel] { var weatherArray: [WeatherModel] = [] for daily in array { weatherArray.append(WeatherModel(city: city, tempMin: "\(daily.nighttemp)", tempMax: "\(daily.daytemp)", textDay: daily.dayweather)) } return weatherArray } func toBytes() -> [UInt8] { var weatherType: WeatherType = .sunny switch text { case "雨": weatherType = .rain case "雪": weatherType = .snow case "晴": weatherType = .sunny case "多云": weatherType = .overcast default: break } switch CurDevice.platform { case ._828: var min = self.lowest if min < 0 { min = 256 + min } var max = self.highest if max < 0 { max = 256 + max } let weatherBytes: [UInt8] = [UInt8(min), UInt8(max), UInt8(weatherType.rawValue)] return weatherBytes // case ._818: // var min = self.lowest // if min < 0 { // min = 128 - min // } // var max = self.highest // if max < 0 { // max = 128 - max // } // // let weatherBytes: [UInt8] = [UInt8(min), UInt8(max), UInt8(weatherType.rawValue)] // return weatherBytes // case ._816: // let cityData: Data = self.city.data(using: .utf8) ?? Data() // var min = self.lowest // if min < 0 { // min = 128 - min // } // var max = self.highest // if max < 0 { // max = 128 - max // } // var weatherBytes: [UInt8] = [UInt8(min), UInt8(max), UInt8(weatherType.rawValue), UInt8(cityData.count)] // weatherBytes.append(contentsOf: [UInt8](cityData)) // print(weatherBytes) // return weatherBytes default: return [] } } func mapping(mapper: HelpingMapper) { mapper.specify(property: &lowest, name: "tempMin") mapper.specify(property: &highest, name: "tempMax") mapper.specify(property: &type, name: "textDay") { rawValue -> WeatherType in switch rawValue { case "晴", "多云", "少云", "晴间多云": return .sunny case "阴": return .overcast case "阵雨", "强阵雨", "雷阵雨", "强雷阵雨", "雷阵雨伴有冰雹", "小雨", "中雨", "大雨", "极端降雨", "毛毛雨/细雨", "细雨", "毛毛雨", "暴雨", "大暴雨", "特大暴雨", "冻雨", "小到中雨", "中到大雨", "大到暴雨", "暴雨到大暴雨", "大暴雨到特大暴雨", "雨": return .rain case "小雪", "中雪", "大雪", "暴雪", "雨夹雪", "雨雪天气", "阵雨夹雪", "阵雪", "小到中雪", "中到大雪", "大到暴雪", "雪": return .snow default: return .overcast } } mapper <<< date <-- CustomDateFormatTransform(formatString: "yyyy-MM-dd HH:mm") } required override init() { } }