繁体   English   中英

Swift - 将值从哈希表转换为 Double

[英]Swift - convert value from hashtable to Double

swift的新手,尝试了很多组合但无法通过。 我有一种方法可以通过[AnyHashable: Any]获取参数列表

那里有 2 个纬度和经度值,它们的值也是字符串,我需要提取这些值并创建一个CLLocationCoordinate这段代码:

let lat = Double(param["latitude"])
let lng = Double(param["longitude"])
let coordinate = CLLocationCoordinate2DMake(lat, lng)

lat 和 lng 的 let 存在编译错误

没有完全匹配调用初始化程序”我该怎么做?

您需要直接投射它

guard let lat = param["latitude"] as? Double , 
      let lng = param["longitude"] as? Double else { return } 
let coordinate = CLLocationCoordinate2DMake(lat, lng)

您的字典定义为[AnyHashable: Any]

键“纬度”和“经度”可能存在也可能不存在,在这些键中找到的值可以是任何类型。

如果您知道“纬度”和“经度”键的值将始终为双精度值,或者始终为字符串,您可以将转换编写为强制转换或强制转换,然后调用Double.init(_:String)

如果您的字典可以包含 String 值或 Double 值,您可以编写一个 function 来处理:

func returnCoordinate(param: [AnyHashable: Any]) -> CLLocationCoordinate2D? {
    if let lat = param["latitude"] as? Double ,
          let lng = param["longitude"] as? Double {
        return CLLocationCoordinate2DMake(lat, lng)
    } else if let latString =  param["latitude"] as? String ,
              let lngString = param["longitude"] as? String,
              let lat = Double(latString),
              let lng = Double(lngString)
               {
        return CLLocationCoordinate2DMake(lat, lng)
    }
    return nil
}

如果字典键不包含双精度或字符串,则 function 将返回 nil。 (如果一个键包含一个 Double 值而另一个键包含一个字符串,它也会失败,但这看起来很愚蠢。)

暂无
暂无

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

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