使用swift和Xcode 6,我试图返回一个基于少量UITextFields的内容计算的值。
我已声明变量
var Number1 = Field1.text.toInt()
var Number2 = Field2.text.toInt()
var Duration = Number1*Number2
Mylabel.text = String ("\(Duration)")
我们的想法是从少数UI字段捕获持续时间,并根据这些值的计算将其分配给变量并将其显示在标签上。
符合:var Duration = Number1 * Number2
挑战是我在执行乘法时Xcode突出显示错误:可选类型的值' Int?'没有打开;你的意思是使用'!'或者'?'?
答案 0 :(得分:3)
toInt()
方法返回可选值,因为它尝试转换的字符串可能不包含正确的值。例如,这些字符串将转换为nil
:"house"
,"3.7"
,""
(空字符串)。
由于值可能为nil
,toInt()
会返回Int
类型的可选Int?
。如果不先打开它,就不能使用该值。这就是您收到错误消息的原因。以下是两种安全的方法来处理这个问题:
当无法转换值时,您需要决定要执行的操作。如果您只想在这种情况下使用0
,那么请使用 nil coalescing operator (??
),如下所示:
let number1 = field1.text.toInt() ?? 0
// number1 now has the unwrapped Int from field1 or 0 if it couldn't be converted
let number2 = field2.text.toInt() ?? 0
// number2 now has the unwrapped Int from field2 or 0 if it couldn't be converted
let duration = number1 * number2
mylabel.text = "\(duration)"
如果您希望程序不执行任何操作,除非两个字段都有有效值:
if let number1 = field1.text.toInt() {
// if we get here, number1 contains the valid unwrapped Int from field1
if let number2 = field2.text.toInt() {
// if we get here, number2 contains the valid unwrapped Int from field2
let duration = number1 * number2
mylabel.text = "\(duration)"
}
}
那么,当它说你的意思是使用!
时,错误信息意味着什么。您可以通过在末尾添加!
来展开可选值,但是您必须绝对确定该值不是第一个,否则您的应用将崩溃。所以你也可以这样做:
if number1 != nil && number2 != nil {
let duration = number1! * number2!
mylabel.text = "\(duration)"
}
答案 1 :(得分:0)
在var中获取textFields的值,将它们相乘,然后设置label的值。试试这个:
var Number1 = Field1.text.toInt()
var Number2 = Field2.text.toInt()
var Duration = Number1 * Number2
Mylabel.text = NSString(format:"%d",Duration!)as String;
希望这会有所帮助.. :)