变量从未发生变异

时间:2015-07-08 11:18:11

标签: swift

我一直在关注制作简单的临时转换应用的应用教程,

我有这些代码行,如下所示

    // get the users imput : c
    var celsius:Int = celsiusValue.text.toInt()!

    //formula : c to f
    // 5f = 9c + 160

    // output : f
    var fah:Int = ( 9 * celsius + 160 ) / 5

    print(fah)

我发现了一些错误,我不明白为什么会这样,

  

'字符串'没有名为' Int'

的成员

这意味着Int无法使用,因为显示的字符串中没有整数?

  

可选类型的值'字符串?'没有打开;你的意思是用吗?   '!'或者'?'?

我已将代码更改为

var celsius:Int = celsiusValue.text!.toInt()!

正如它在错误帮助程序中所做的那样,但它仍然给出了与

相同的错误
  

可选类型的值'字符串?'没有打开;你的意思是用吗?   '!'或者'?'?

所以现在我对它感到困惑,我已经读过关于这个变量的其他线索从未发生变异,但它似乎没有帮助我解决它发生的事情

2 个答案:

答案 0 :(得分:2)

评论太长了......

"变量从未发生变异"在Swift中不是致命的错误。它更像是一个指南,也是一个非常烦人的指南。每次你创建一个新变量时都会说,因为你还没有变异它。 Xcode希望您使用let将所有非变异内容写为常量。

可选类型的值'字符串?'没有打开;你的意思是使用'!'或者'?'? 这是一个非常重要的问题,您可以在SO上找到关于它的数千个问题。 Swift有选项,意味着它可以保留一个值,或者它根本没有任何东西。那将是零。这可能会导致错误,这就是您使用"!"和"?"。如果您使用"!"声明或解包。结果将被处理,就像它不是可选的。它可能仍然是零,但不会检查是否为零。如果你想让它更模糊,可以使用"?"这样,Xcode会一直警告您正在使用可选项。

但更多关于此以及如何使用选项编写代码可以通过google / SO找到。

至于String =>诠释。如果我没记错的话,这只适用于NSStrings。因此,请确保在那里获得NSString。否则,你必须将其转换为NSString。

答案 1 :(得分:1)

如果用户输入无法转换为.swiper-container .swiper-slide { max-width: 700px; margin-left: 3px; margin-right: 0!important; display: inline-block; width: auto; overflow: hidden; } .swiper-container .swiper-slide img { width: auto; } .swiper-container .swiper-slide:first-child { margin-left: 0; } .swiper-wrapper * { height: 100%; } .swiper-container { height: 100%; } .swiper-container-horizontal > .swiper-pagination { bottom: auto; top: 50%; margin-top: -60px; } .swiper-prev, .swiper-next { width: 60px; height: 120px; background: rgba(0, 0, 0, 0.2); line-height: 150px; cursor: pointer; border-radius: 3px; -webkit-transition: all 0.2s; -moz-transition: all 0.2s; -o-transition: all 0.2s; transition: all 0.2s; } .swiper-prev { margin-left: 45px; float: left; } .swiper-next { margin-right: 45px; float: right; } (例如:" foo")

,您的代码就会崩溃

您可能更愿意重写代码,如下所示:

Int

请注意,我选择if let celsius = celsiusValue.text.toInt() { //formula : c to f // 5f = 9c + 160 // output : f let fah: Double = ( 9 * Double(celsius) + 160 ) / 5 print(fah) } else { // Handle Error } 作为fah ...只是为了处理更高的精确度,而不是针对您的问题的原因。

另请注意,在这种情况下,不需要使用Double。类似的情况在Swift中很常见并且受到鼓励(与其他语言一样)。

希望这有帮助