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!