我有一个基于这个结构的数组:
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]()我的搜索功能是这样的:
func getApLat(ApName: String) -> Double{
let LAT: Double
var latFindString = FR_airportsDB.contains(Airports2.init(Icao: ApName))
LAT = Double(latFindString)!
return LAT
}但是这是行不通的,我认为.contains不是最好的使用,但我不知道如何在结构化数组中进行搜索。
希望能把我的问题弄清楚。
谢谢你的帮忙
发布于 2022-09-07 13:23:51
首先,请根据命名约定将变量命名为lowerCamelCase,并将结构命名为单数形式。
var frAirportsDB = [Airport2]()若要搜索特定属性值,请尝试获取数组first中的where项,将此属性is equal的值转换为参数中的值。
您必须返回一个可选项,因为该项可能不可用,并且无法将该字符串转换为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将大写键转换为小写属性名称。并且结构中的所有默认值都不是必需的。即使没有,代码也会编译。
https://stackoverflow.com/questions/73636139
复制相似问题