尝试在swift中捕获变量

时间:2016-08-31 16:43:52

标签: swift swift2 try-catch

我正在尝试添加针对变量的try catch。没有尝试捕捉我这个错误:

  

致命错误:在解包变量Double的可选值时意外发现nil(label.text!)!

所以我想抓住上面的错误。我试过下面的

do{
    let value = try Double(label.text!)!
    print("value\(value)")
} catch{
    print("hi")
}

但它仍然会出现同样的错误,我也看到了这个警告:

  

在无法访问的try和catch块中没有调用抛出函数...

这是在swift中使用try catch块的正确方法吗?

编辑:(不重复)如果我只是返回return Double(labelDisplay.text)我得到编译错误value of option type String? not unwrapped, so I have to use返回Double(labelDisplay.text!)!`这就是失败的地方。这就是我试图抓住它的原因。

另一个编辑:标签为@IBOutlet weak private var label: UILabel!

编辑:返回代码

var displayValue: Double{
    get{
        print(labelDisplay.text.dynamicType)
        return Double(labelDisplay.text!)!
    }
    set{
        labelDisplay.text! = String(newValue)
    }
}

3 个答案:

答案 0 :(得分:2)

从字符串中制作double不会抛出,所以你不会抓到任何东西,你应该

if let value = Double(label.text) {
    //here it worked out 
    print("value \(value)")
} else {
    //it failed
}

答案 1 :(得分:1)

我个人会使用if let,我相信这是你本来想要的。

if let value = Double(label.text!)!{
    print("value\(value)")
}else{
    print("hi")
}

请告诉我这是否符合您的要求,如果没有,我会很乐意以任何其他方式提供帮助!

更新:

if let value = Double(label.text!){
        print("value\(value)")
    }else{
        print("hi")
    }

这是正确的方法。注意:标签文本只是解包,而不是整个双。如果是label.text!是有效数字(“3.14159”)而不是文本(“hello”),则将打印该值。如果没有,else语句将捕获它。

更新2:

WORKING:

声明:

var displayValue: Double{
    get{
        return Double(label.text!)!
    }
    set{
        displayLabel.text! = String(newValue)
    }
}

功能:

if let value = Double(label.text!){
        print("value\(value)")

        displayLabel.text! = "\(displayValue)"

    }else{
        print("hi")
    }

答案 2 :(得分:1)

Actually, it does exist a try-catch operation in Swift. In the official documentation at Apple's Website, explains that this should be done like:

do {
    try expression
    statements
} catch pattern 1 {
    statements
} catch pattern 2 where condition {
    statements
}

For example:

var vendingMachine = VendingMachine()
vendingMachine.coinsDeposited = 8
do {
    try buyFavoriteSnack("Alice", vendingMachine: vendingMachine)
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let coinsNeeded) {
    print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.")
}

The source of this can be found here: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html