【问题标题】:Cannot assign value of type 'String?' to type 'Double' error无法分配“字符串”类型的值?键入“双重”错误
【发布时间】:2017-04-11 11:36:13
【问题描述】:

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

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

我用属性名称(type = string)、latitude(type = double)和longitude(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)

    }
}

【问题讨论】:

    标签: ios swift xcode core-data double


    【解决方案1】:

    就这样试试吧

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

    示例如下

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

    【讨论】:

    • 如果文本不能转成double会导致崩溃,这种情况下最好使用if let语句。
    【解决方案2】:

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

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

    这样,如果其中一个文本无法转换为双精度,您的应用不会崩溃,但位置经度或纬度将保持为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      相关资源
      最近更新 更多