Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 变量从未发生过变异_Swift - Fatal编程技术网

Swift 变量从未发生过变异

Swift 变量从未发生过变异,swift,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) 我有几个错误

我一直在遵循一个制作简单温度转换应用程序的应用程序教程

我有如下所示的代码行

    // 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)
我有几个错误,我不明白为什么

“String”没有名为“Int”的成员

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

可选类型“字符串”的值未展开;你是想用 '!' 还是“?”

我已将代码更改为

var celsius:Int = celsiusValue.text!.toInt()!
正如它在错误帮助器中所显示的那样,但它仍然给了我与

可选类型“字符串”的值未展开;你是想用 '!' 还是“?”


所以现在我对它感到困惑,我读过其他关于变量从未变异的帖子,但它似乎没有帮助我处理它发生的事情,评论时间太长了

“变量从未突变”在Swift中不是致命错误。这更像是一个指导方针,而且非常烦人。每次你创建一个新变量时,它都会这样说,因为你还没有对它进行变异。Xcode希望您使用
let
将所有未变异的内容编写为常量

可选类型“字符串”的值未展开;你想用“!”吗还是“?”? 这是一个非常重要的问题,你可以在上面找到成千上万的问题。Swift有选择权,这意味着它可以持有价值,也可以不持有任何东西。然后将是零。这可能会导致错误,这就是为什么使用“!”和“?”的原因。如果您使用“!”声明或展开,结果将被视为不是可选的。它可能仍然为零,但不会检查是否为零。如果您想让它更模糊,使用“?”这样Xcode会不断警告您正在使用可选的

但更多关于这一点以及如何使用optionals编写代码的信息可以通过google/SO找到


至于String=>Int。如果我没记错的话,这只适用于NSStrings。所以确保你有一个NSString。否则,您必须将其转换为NSString。

如果用户输入不能转换为
Int
(例如:“foo”),您的代码将崩溃

您可能更喜欢按如下方式重写代码:

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
。。。只是为了更精确地处理问题,而不是为了你的问题

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


希望这有帮助

请指定什么类型的
celsiusValue
这是一段代码,我想你需要@IBOutlet var celsiusValue:UITextField!