尝试从文本字段获取纬度和经度时无法转换类型的值
Cannot convert value of type when trying to get latitude and longitude from text fields
Image of the project
我的代码不工作。
当用户输入纬度和经度时,它应该转到地图,但它只是抛出一个错误。只有当我硬编码纬度和经度时它才有效。
import UIKit
import MapKit
class ViewController: UIViewController {
@IBOutlet weak var Longitude: UITextField!
@IBOutlet weak var Latitude_button: UITextField!
@IBAction func showMeWhere(_ sender: Any)
{
//Defining destination
let latitude:CLLocationDegrees = Latitude_button
let longitude:CLLocationDegrees = Longitude
// let latitude:CLLocationDegrees = 39.048825
// let longitude:CLLocationDegrees = -120.981227
let regionDistance:CLLocationDistance = 1000;
let coordinates = CLLocationCoordinate2DMake(latitude, longitude)
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
let options = [MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span)]
let placemark = MKPlacemark(coordinate: coordinates)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = "Test Location"
mapItem.openInMaps(launchOptions: options)
}
}
类型不正确。
改变
let latitude:CLLocationDegrees = Latitude_button
到
Double(Latitude_button.text ?? "") ?? 0
。
同longitude
let longitude:CLLocationDegrees = Double(Longitude.text ?? "") ?? 0
此外,您的命名约定也很不恰当。应该像 latitudeButton
和 longitude
.
在您的行 let latitude:CLLocationDegrees = Latitude_button
上,您正试图将类型 UITextField
的变量分配给类型 CLLocationDegrees
.
的变量
您需要做的是从文本字段中获取文本并尝试将其转换为数字,然后将该数字分配给您的变量。
guard let latitude = CLLocationDegrees(Latitude_button.text!),
let longitude = CLLocationDegrees(Longitude.text!) else {
// show some sort message to the user that the values are invalid
return
}
这里有一些可能会帮助您入门的东西,就像我去过的那样:
在Swift中,变量在camelCase
中,按照惯例,变量声明远离snake_case
和Capitalized
。我会为你的 @IBOutlets
...
做这样的事情
@IBOutlet weak var longitudeField: UITextField!
@IBOutlet weak var latitudeField: UITextField!
UITextFields
中有 Strings
,但是在您的 showMeWhere
方法中,您试图将 UITextField
分配给 CLLocationDegrees
.
UITextField
有一个 属性 叫做 text
。这就是您想要的,而不是字段...您需要字段中的文本。
CLLocationDegrees
是 Double
的 typealias
...所以在您将 String
转换为 [=25 之前的问题=].
您可以这样做:
guard let latitude = Double(latitudeField.text),
let longitude = Double(longitudeField.text) else { return }
Image of the project
我的代码不工作。 当用户输入纬度和经度时,它应该转到地图,但它只是抛出一个错误。只有当我硬编码纬度和经度时它才有效。
import UIKit
import MapKit
class ViewController: UIViewController {
@IBOutlet weak var Longitude: UITextField!
@IBOutlet weak var Latitude_button: UITextField!
@IBAction func showMeWhere(_ sender: Any)
{
//Defining destination
let latitude:CLLocationDegrees = Latitude_button
let longitude:CLLocationDegrees = Longitude
// let latitude:CLLocationDegrees = 39.048825
// let longitude:CLLocationDegrees = -120.981227
let regionDistance:CLLocationDistance = 1000;
let coordinates = CLLocationCoordinate2DMake(latitude, longitude)
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
let options = [MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span)]
let placemark = MKPlacemark(coordinate: coordinates)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = "Test Location"
mapItem.openInMaps(launchOptions: options)
}
}
类型不正确。
改变
let latitude:CLLocationDegrees = Latitude_button
到
Double(Latitude_button.text ?? "") ?? 0
。
同longitude
let longitude:CLLocationDegrees = Double(Longitude.text ?? "") ?? 0
此外,您的命名约定也很不恰当。应该像 latitudeButton
和 longitude
.
在您的行 let latitude:CLLocationDegrees = Latitude_button
上,您正试图将类型 UITextField
的变量分配给类型 CLLocationDegrees
.
您需要做的是从文本字段中获取文本并尝试将其转换为数字,然后将该数字分配给您的变量。
guard let latitude = CLLocationDegrees(Latitude_button.text!),
let longitude = CLLocationDegrees(Longitude.text!) else {
// show some sort message to the user that the values are invalid
return
}
这里有一些可能会帮助您入门的东西,就像我去过的那样:
在Swift中,变量在
做这样的事情camelCase
中,按照惯例,变量声明远离snake_case
和Capitalized
。我会为你的@IBOutlets
...@IBOutlet weak var longitudeField: UITextField! @IBOutlet weak var latitudeField: UITextField!
UITextFields
中有Strings
,但是在您的showMeWhere
方法中,您试图将UITextField
分配给CLLocationDegrees
.UITextField
有一个 属性 叫做text
。这就是您想要的,而不是字段...您需要字段中的文本。CLLocationDegrees
是Double
的typealias
...所以在您将String
转换为 [=25 之前的问题=].
您可以这样做:
guard let latitude = Double(latitudeField.text),
let longitude = Double(longitudeField.text) else { return }