尝试从文本字段获取纬度和经度时无法转换类型的值

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_buttonDouble(Latitude_button.text ?? "") ?? 0

longitude

let longitude:CLLocationDegrees = Double(Longitude.text ?? "") ?? 0

此外,您的命名约定也很不恰当。应该像 latitudeButtonlongitude.

在您的行 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
}

这里有一些可能会帮助您入门的东西,就像我去过的那样:

  1. 在Swift中,变量在camelCase中,按照惯例,变量声明远离snake_caseCapitalized。我会为你的 @IBOutlets...

    做这样的事情
    @IBOutlet weak var longitudeField: UITextField!
    @IBOutlet weak var latitudeField: UITextField!
    
  2. UITextFields 中有 Strings,但是在您的 showMeWhere 方法中,您试图将 UITextField 分配给 CLLocationDegrees.

    • UITextField 有一个 属性 叫做 text。这就是您想要的,而不是字段...您需要字段中的文本。

    • CLLocationDegreesDoubletypealias...所以在您将 String 转换为 [=25 之前的问题=].

您可以这样做:

guard let latitude = Double(latitudeField.text), 
      let longitude = Double(longitudeField.text) else { return }