11

電卓であるこのコードを試しています。ユーザーからの無効な入力を処理するにはどうすればよいですか?

//答え: Objective-C へのブリッジ ヘッダー// https://github.com/kongtomorrow/TryCatchFinally-Swift

これは同じ質問ですが、objcにありますが、これを迅速に行いたいです。NSExpression からの NSInvalidArgumentException のキャッチ

表示したいのは、機能しない場合のメッセージだけですが、ユーザーが正しい形式を入力しないと例外が発生します。

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")
}
4

3 に答える 3

13

より「迅速な」ソリューション:

@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
}
于 2015-11-20T19:15:10.167 に答える