ios - 在 swift 中捕获无效用户输入的异常

标签 ios cocoa-touch exception-handling swift nsexpression

我正在尝试这段代码,它是一个计算器。如何处理来自用户的无效输入?

//答案:桥接 header 到 Objective-C//https://github.com/kongtomorrow/TryCatchFinally-Swift

这是同一个问题,但在 objc 中,但我想快速完成。 Catching NSInvalidArgumentException from NSExpression

如果它不起作用,我只想显示一条消息,但现在当用户没有输入正确的格式时,我会收到一个异常。

import Foundation

var equation:NSString = "60****2"  // This gives a NSInvalidArgumentException', 
let expr = NSExpression(format: equation) // reason: 'Unable to parse the format string
if let result = expr.expressionValueWithObject(nil, context: nil) as? NSNumber {
    let x = result.doubleValue
    println(x)
} else {
    println("failed")
}

最佳答案

更多“Swifty”解决方案:

@implementation TryCatch

+ (BOOL)tryBlock:(void(^)())tryBlock
           error:(NSError **)error
{
    @try {
        tryBlock ? tryBlock() : nil;
    }
    @catch (NSException *exception) {
        if (error) {
            *error = [NSError errorWithDomain:@"com.something"
                                         code:42
                                     userInfo:@{NSLocalizedDescriptionKey: exception.name}];
        }
        return NO;
    }
    return YES;
}

@end

这将生成 Swift 代码:

class func tryBlock((() -> Void)!) throws

您可以将它与 try 一起使用:

do {
    try TryCatch.tryBlock {
        let expr = NSExpression(format: "60****2")
        ...
    }
} catch {
    // Handle error here
}

关于ios - 在 swift 中捕获无效用户输入的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710424/

相关文章:

iphone - 在 cocoa 中的字符串上使用 MD5 哈希?

c# - 什么会导致 throw 重置调用堆栈(我使用的是 "throw",而不是 "throw ex")

ios - Xcode8 提交错误-如何在 iOS10 上找出究竟需要特定权限的内容

ios - 从另一个类调用的类函数

iphone - 当 UIWebView 尝试阻塞锁定 Web 线程时,避免主线程卡住

java - Spring MVC 中的模型填充 @ExceptionHandler

java - 检查等同于 IllegalArgumentException?

ios - ARC 是否消除了对临时变量的需要?

ios - AFHTTPRequestOperationManager POST 请求因网络连接丢失而失败 (-1005)

ios - 如何在 iOS7 中搜索 NSString 句子中用逗号分隔的特定单词?