繁体   English   中英

SwiftUI 尝试在数组中查找值并将其保存到 Var

[英]SwiftUI Trying to find a value into an Array and save it into a Var

我有一个基于这个结构的数组:

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()
}

我想创建一个 function 作为参数,它有一个对应于 ICAO 的字符串,并从 ICAO 找到机场纬度并仅将纬度保存在一个简单的 var 中并返回它。

我的 Airport 数组声明如下:

var FR_airportsDB = [Airports2]()

我的“搜索功能”是这样的:

func getApLat(ApName: String) -> Double{
    
    let LAT: Double
    
    var latFindString = FR_airportsDB.contains(Airports2.init(Icao: ApName))
    
    LAT = Double(latFindString)!
    
    return LAT
}

但这不起作用,我认为.contains不是最好用的,但我不知道如何在结构化数组中进行搜索。

希望能清楚我的问题..

谢谢你的帮助

首先,请根据命名约定命名您的变量 lowerCamelCase 并以单数形式命名您的结构

var frAirportsDB = [Airport2]()

要搜索特定属性的值,请尝试获取数组where该属性的值is equal参数中的值的first项。

您必须返回一个可选项,因为该项目可能不可用并且字符串无法转换为 Double

func getApLat(apName: String) -> Double? {
    
    guard let foundAirport = frAirportsDB.first(where: {$0.Icao == apName}),
          let lat = Double(foundAirport.Latitude) else { return nil }
    
    return lat
}

并且请添加 CodingKeys 以将大写键转换为小写属性名称。 结构中的所有默认值都不是必需的。 即使没有,代码也可以编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM