Невозможно преобразовать значение типа при попытке получить широту и долготу из текстовых полей - PullRequest
0 голосов
/ 13 ноября 2018

Изображение проекта

Мой код не работает.Когда пользователь вводит широту и долготу, он должен перейти в Карты, но просто выдает ошибку.Это работает только тогда, когда я жестко закодировал широту и долготу.

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)
    }
}

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

В вашей строке 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
}
0 голосов
/ 13 ноября 2018

Вот некоторые вещи, которые могут помочь вам начать работу, поскольку я был там:

  1. В Swift переменные находятся в camelCase, и, по соглашению, держитесь подальшеот snake_case и Capitalized для объявлений переменных.Я бы сделал что-то подобное для вашего @IBOutlets ...

    @IBOutlet weak var longitudeField: UITextField!
    @IBOutlet weak var latitudeField: UITextField!
    
  2. UITextFields с Strings в них, но внутри вашего showMeWhere метода выпри попытке тянуть присвоить UITextField CLLocationDegrees.

    • UITextField имеет свойство с именем text.Это то, что вы хотите, а не поле ... вы хотите текст в поле.

    • CLLocationDegrees это typealias для Double... так что проблема перед вами заключается в преобразовании String в Double.

Вот как вы это сделаете:

guard let latitude = Double(latitudeField.text), 
      let longitude = Double(longitudeField.text) else { return }
0 голосов
/ 13 ноября 2018

Тип не правильный.

Изменение let latitude:CLLocationDegrees = Latitude_button в Double(Latitude_button.text ?? "") ?? 0.

То же, что и longitude

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

Кроме того, ваши условные обозначения не очень правильные. Должно быть как latitudeButton и longitude.

...