【问题标题】:How can I convert a String into a Double if the String is optional?如果 String 是可选的,如何将 String 转换为 Double?
【发布时间】:2019-08-02 04:27:43
【问题描述】:

我想将输入转换为 UITextField 并将其转换为 Double 以进行计算。

func testFunction(field: UITextField) -> Int {
   let textInField: String! = field.text
           let value = Double!(textInField)

}

但我得到了错误:

'字符串?不能转换为“双”

我该如何解决这个问题?

【问题讨论】:

  • 你不能解开一个类型。函数的返回类型应该是可选的:Int?return Int(field.text!) 应该可以。
  • 强制解包field.text!
  • 首先要考虑的是,如果 String 是可选的,那么如果 String 为 nil,你想返回什么 Double 值。
  • @UpholderOfTruth 这不是文本属性默认值是空字符串的情况。 UITextField 的 text 属性永远不会返回 nil
  • 自己试试吧。将 text 设置为 nil 并在其后检查其值。 这个字符串默认是@""。

标签: swift string type-conversion uitextfield double


【解决方案1】:

也许这是正确的格式?

   func testFunction(field: UITextField) -> Int {
 if  let textInField  = field.text ,
      let value = Double(textInField){
   print(value)
   }}

【讨论】:

  • 不,绝对不是。 text 文本字段的属性永远不会是 nil 所以你可以安全地强制解开它
  • 这个怎么样
  • 拜托……这段代码有太多错误……这段代码甚至无法编译
【解决方案2】:

textUITextField 的属性:

这个字符串默认是@""。

所以,这意味着事实上这个属性永远不会是nil,所以你可以使用感叹号安全地强制解包

let textInField = field.text! // String

那么,你的方法应该返回Double,而不是Int。另外如果Double初始化失败,它会返回nil,所以你的方法应该返回可选值类型

func testFunction(field: UITextField) -> Double? {
    return Double(field.text!)
}

最后一件事,当你调用这个方法时,你应该安全地解开它的返回值。为此,您可以使用可选绑定

if let doubleValue = testFunction(field: someField) {
    // work with `doubleValue`
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2013-05-02
    相关资源
    最近更新 更多