我在编译器中遇到以下错误 -
(position: CLLocationCoordinate2D) -> GMSMarker
不可转换为(position: CLLocationCoordinate2D) -> GMSMarker!
。
请帮我解决。
产生此错误的代码是 -
let location = CLLocationCoordinate2D(latitude: Double(latitudeVal!)!, longitude: Double(longitudeVal!)!)
let locationMarker = GMSMarker(position: location)
latitudeVal
& longitudeVal
是来自服务器的字符串值。
提前致谢。
答案 0 :(得分:1)
这是Swift编译器优化的错误。请参阅'UIFont' is not convertible to 'UIFont?'。
要解决此问题,您可以在构建设置中关闭“整体模块优化” - >优化级别 - > (调试/释放)。
或者,您可以在不关闭“整体模块优化”的情况下将代码更改为以下内容。
let locationMarker = GMSMarker.init(position: location)
希望得到这个帮助。
答案 1 :(得分:0)
应用以下代码,它在我身边正常工作。
let location = CLLocationCoordinate2DMake((latitudeVal as NSString).doubleValue, (longitudeVal as NSString).doubleValue)
let locationMarker = GMSMarker(position: location)
希望这对你有用。
答案 2 :(得分:0)
等式左边的等式let locationMarker = GMSMarker(position: location)
是GMSMarker!
的类型,等式的右边是GMSMarker
的类型。所以你不能将权利分配到左边。
您可以更改let locationMarker: GMSMarker = GMSMarker(position: location)
或let locationMarker = GMSMarker(position: location)!
。你可以试试。
答案 3 :(得分:0)
你应该解开你的选择。
guard let long = longitudeVal else {
print("No longitude provided")
return
}
guard let lat = latitudeVal else {
print("No latitude provided")
return
}
guard let longVal = Double(long) else {
print("Longitude contains an invalid value")
return
}
guard let latVal = Double(lat) else {
print("Latitude contains an invalid value")
return
}
let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
let locationMarker = GMSMarker(position: location)
答案 4 :(得分:0)
好的,最后我解决了它:): -
让locationMarker = GMSMarker()
locationMarker.position = location
希望它不会对代码的工作产生任何影响。
谢谢大家!