【问题标题】:Int() doesn't convert from String to Optional Integer (Swift)Int() 不会从 String 转换为 Optional Integer (Swift)
【发布时间】:2018-02-18 20:53:47
【问题描述】:

我是编程新手,从 Swift 开始。我遇到的第一个问题如下:

我有 4 个变量

var a = "345"

var b = "30.6"

var c = "74hf2"

var d = "5"

我需要计算整数的总和(如果不是整数,它将变为nil)

if Int(a) != nil {
  var aNum = Int(ar)!
} 

if Int (b) != nil {
  var bNum = Int (b)! 
}       

等等……

据我了解,Int() 应该将每个元素转换为可选整数。

那么我应该通过转换 Int 来使用强制展开?到 Int,然后我才能将它用于我的目的。但是,当我计算变量的总和时,编译器会将它们作为字符串求和。

 var sum = aNum + bNum + cNum + dNum

输出:

  34530.674hf25

为什么我的变量(声明为字符串,然后使用 Int() 转换为可选整数)不起作用?

【问题讨论】:

  • 你在哪里“数一数”? – 顺便说一句,var 6 = "30.6" 清楚地表明这不是您的真实代码。
  • 您应该花点时间阅读 Swift 书籍的 Optionals 部分。
  • 仅供参考 - 你的四个 String 变量不是可选的。但这与您的问题无关。
  • 您的 if Int(a) != nil { var aNum = Int(ar)! } 将整数分配给 局部变量 aNum,其范围只是 if 块。显然你有另一个 aNum 变量(可能是一个字符串),你没有显示它,它在 var sum = aNum + bNum + cNum + dNum 中“添加”。

标签: swift optional forced-unwrapping


【解决方案1】:

您的代码中存在拼写错误,因此很难判断您实际要做什么:

假设你的第二个变量应该是b,如下:

var a = "345"
var b = "30.6"
var c = "74hf2"
var d = "5"

///Then you can use code like this:

var sum = 0

if let aVal = Int(a) { sum += aVal }

if let bVal = Int(b) { sum += bVal }

if let cVal = Int(c) { sum += cVal }

if let dVal = Int(d) { sum += dVal }

print(sum)

打印 350 因为只有 3455 是有效的 Int 值。

【讨论】:

  • 上述代码使用if let 可选绑定。您应该阅读可选绑定。如果可选项不是 nil,它允许您从可选项创建新变量,然后执行 if 语句的主体。如果可选包含nil,则跳过if 的正文
  • 我知道可选绑定,它在这种情况下有效,我试过了。但问题是我想了解,为什么强制展开在这里不起作用。为什么 Int() 最初不将变量类型转换为可选的 Integer?
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2014-10-09
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多