You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:根据ICAO从结构化数组查询机场纬度并返回的问题

问题:根据ICAO代码查询机场纬度并转为Double类型

用户定义的结构体与数组声明:

struct Airports2: Identifiable, Codable, Hashable{
    var AirportID: String = ""
    var Icao: String = ""
    var ApType: String = ""
    var Name: String = ""
    var Latitude: String = ""
    var Longitude: String = ""
    var Altitude: String = ""
    var Continent: String = ""
    var Country: String = ""
    var Region: String = ""
    var Municipality: String = ""
    var Service: String = ""
    var GpsCode: String = ""
    var Iata: String = ""
    var LocalCode: String = ""
    var Link: String = ""
    var wikiLink: String = ""
    var Keyword: String = ""
    let id = UUID()
}

var FR_airportsDB = [Airports2]()

原函数存在的问题:

  • contains方法仅返回布尔值,只能判断元素是否存在,无法获取具体的纬度数据,直接强制转换会导致逻辑错误
  • 通过Airports2.init(Icao: ApName)创建新实例做匹配,由于结构体中id是唯一UUID,即使ICAO相同,新实例和数组内的实例也会被判定为不相等,导致contains永远返回false

正确实现方案

使用first(where:)方法直接定位匹配ICAO的机场实例,再提取纬度字符串转换为Double。以下是两种安全的实现方式:

方案1:返回可选Double(推荐,避免崩溃)

func getApLat(icaoCode: String) -> Double? {
    // 查找匹配ICAO的机场
    guard let targetAirport = FR_airportsDB.first(where: { $0.Icao == icaoCode }) else {
        return nil // 无匹配机场时返回nil
    }
    // 将纬度字符串转为Double,转换失败也会返回nil
    return Double(targetAirport.Latitude)
}

方案2:返回非可选Double(带默认值)

如果业务要求必须返回非可选类型,可以设置默认值处理异常情况:

func getApLat(icaoCode: String) -> Double {
    guard let targetAirport = FR_airportsDB.first(where: { $0.Icao == icaoCode }),
          let latitude = Double(targetAirport.Latitude) else {
        return 0.0 // 无匹配或转换失败时返回默认值
    }
    return latitude
}

高频查询优化建议

如果需要频繁根据ICAO查询机场,可以提前将数组转为字典,大幅提升查询效率:

// 预构建ICAO到机场的映射字典
let airportICAODict = Dictionary(uniqueKeysWithValues: FR_airportsDB.map { ($0.Icao, $0) })

// 优化后的查询函数
func getApLat(icaoCode: String) -> Double? {
    guard let targetAirport = airportICAODict[icaoCode] else {
        return nil
    }
    return Double(targetAirport.Latitude)
}

内容的提问来源于stack exchange,提问作者flyer74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:45:38