无法指定'String'类型的值?输入'Double'错误

时间:2017-04-11 11:36:14

标签: ios swift xcode core-data double

我是Swift和xCode的新手,如果我的某些术语不正确,请道歉。

我刚刚开始学习CoreData,并且正在尝试生成一个基本功能,用户可以在其中创建“位置”。

我使用属性名称(type = string),纬度(type = double)和经度(type = double)设置数据模型。

我已经设置了一个TableViewController(工作正常),其中有一个segue到另一个控制器,该控制器设置为允许人们输入名称,纬度和经度。

据我所知,除了读取我连接到纬度和经度插座的文本字段的两行代码外,所有内容都设置正确。此代码包含在AddLocationController中。

任何帮助将不胜感激!

@IBOutlet var nameTextField:UITextField!
@IBOutlet var latitudeTextField:UITextField!
@IBOutlet var longitudeTextField:UITextField!

@IBAction func save(sender: AnyObject) {
if let appDelegate = (UIApplication.shared.delegate as? AppDelegate) {
        location = LocationMO(context: appDelegate.persistentContainer.viewContext)

        location.name = nameTextField.text

        // This is where the error occurs
         location.latitude = latitudeTextField.text
         location.longitude = longitudeTextField.text

    print("saving data to context ...")
    appDelegate.saveContext()

    }

    dismiss(animated: true, completion: nil)

    }
}

2 个答案:

答案 0 :(得分:3)

试试这种方式

location.latitude = Double(latitudeTextField.text)
 location.longitude = Double(longitudeTextField.text)
  

下面给出的例子

let str:String = "5.0"
 if let myd:Double = Double(str)
 {
         print(myd)
  }

答案 1 :(得分:0)

您的问题是您正在尝试将字符串值赋予double。 为了解决这个问题并避免应用程序崩溃,如果文本无法转换为double,请使用:

if let lat = latitudeTextField.text as? Double{
 location.latitude = lat

}
if let long = longitudeTextField.text as? Double{
 location.longitude = long
}

通过这种方式,如果其中一个文本无法转换为双倍,您的应用程序将不会崩溃,但位置经度或纬度将保持不变。