2017-02-05 31 views
0

我做的所有事情,尝试ahhhhhh,在解包可选值时发现致命错误为零。如果UITextField为空或零,则返回Double

是的我知道你不应该强迫解包,但xcode迫使我把该死的!

我有一个输入框,我从另一个函数调用它必须返回Double

@IBOutlet weak var inputField: UITextField! 

// viewDidLoad(): 
inputField.keyboardType = .decimalPad 

// Fail! 
func returnDouble() -> Double { 
guard let f = inputField.text else {return 0.00 } 
return Double(f)! 
} 

// Fail! 
func returnDouble() -> Double { 
// if let f = (inputField.text?.characters.count)! > 0 {} // mega fail 
guard let f = inputField.text else {return 0.00 } 
return Double(f)! 
} 

// Fail! 
func returnDouble() -> Double { 
    if let f = inputField.text { 
     return Double(f)! 
    } else { 
     return 0.00 
    } 
} 

林失去了在这一点上。如果输入字段是空白的,我应该得到0.0或者如果不是那么输入的值。我也试过inputField.hasText,但我不得不加!,它也崩溃。请任何第二只眼睛?

+0

你的文本框出口到文本字段连接在故事板? – Sweeper

+0

@Sweeper是的,我有 – Sylar

回答

0

这可能听起来非常直观。

如果您访问textField.text当文本字段为空时,您将获得""而不是nil

你所有三次尝试检查文本是否为nil。但是由于文本字段的文本几乎从不是nil,所以您的警戒语句总是成功的。

现在您拥有包含值""的变量f。你将它传递给一个Double初始值设定项。你基本上写:

Double("")! 

好,Double("")失败并返回nil,你再逼解开它。繁荣!

你应该检查而不是为空字符串:

func returnDouble() -> Double { 
    if inputField.text != "" { 
     return Double(f)! 
    } else { 
     return 0.00 
    } 
} 
相关问题