Swift中如何将风向角度转为风向标识?代码赋值报错求助
嘿,我来帮你搞定Swift里风向角度转标识的问题~
首先得说你代码里的核心错误:degrees是Float类型的变量,你却直接给它赋值字符串(比如"N"),Swift是强类型语言,这种跨类型的赋值肯定会报错,这就是所有=处出错的原因。
下面给你一套清晰的解决方案,不仅能解决错误,还能让代码更易读复用:
第一步:写一个单独的转换函数
把角度转风向的逻辑抽成独立函数,以后哪里需要都能直接调用:
func windDirection(from degrees: Float) -> String { // 先处理超过360或负数的角度,比如370度转成10度,-5度转成355度 let normalizedDegrees = degrees.truncatingRemainder(dividingBy: 360) // 用switch-case替代一堆if-else,逻辑更清晰 switch normalizedDegrees { case 348.75...360, 0...11.25: return "N" case 11.25..<33.75: return "NNE" case 33.75..<56.25: return "NE" case 56.25..<78.75: return "ENE" case 78.75..<101.25: return "E" case 101.25..<123.75: return "ESE" case 123.75..<146.25: return "SE" case 146.25..<168.75: return "SSE" case 168.75..<191.25: return "S" case 191.25..<213.75: return "SSW" case 213.75..<236.25: return "SW" case 236.25..<258.75: return "WSW" case 258.75..<281.25: return "W" case 281.25..<303.75: return "WNW" case 303.75..<326.25: return "NW" case 326.25..<348.75: return "NNW" default: return "Unknown" } }
第二步:修改你的JSON解析代码
不要直接修改Float类型的degrees,而是调用上面的函数得到字符串结果:
// 建议用Swift原生的[String: Any]替代NSDictionary,更符合Swift编程习惯 if let windDictionary = jsonObj?["wind"] as? [String: Any] { if let degrees = windDictionary["deg"] as? Float { // 调用转换函数得到风向标识 let direction = windDirection(from: degrees) // 这里可以把direction用在你需要的地方,比如显示到UI上 print("当前风向:\(direction)") } }
几个关键说明:
- 类型匹配:我们用新的字符串变量存储风向结果,不再给Float类型的
degrees赋值字符串,彻底解决类型错误 - 异常处理:
truncatingRemainder能处理超出0-360范围的角度,避免逻辑漏洞 - 代码可读性:switch-case比一堆if-else更整洁,后续修改风向范围也更方便
内容的提问来源于stack exchange,提问作者Rich J
相关产品推荐
相关产品推荐

