Próbuję ten kod, który jest kalkulatorem. Jak mogę obsługiwać dane wejściowe od użytkownika, który nie jest prawidłowy?Złap wyjątek dla nieprawidłowego wprowadzania danych przez użytkownika w swift
// ODPOWIEDŹ: Bridging nagłówek do Objective-C // https://github.com/kongtomorrow/TryCatchFinally-Swift
Oto samo pytanie, ale w ObjC ale chcę to zrobić w systemie SWIFT. Catching NSInvalidArgumentException from NSExpression
Wszystko, co chcę pokazać, to wiadomość, jeśli nie działa, ale teraz otrzymuję wyjątek, gdy użytkownik nie wprowadzi poprawnego formatu.
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")
}
Dlaczego nie używać dopasowania regularnego, aby zobaczyć listę dopuszczalnych równań. Powinieneś rozważyć "teorię automatyzacji", aby zrozumieć obliczenia. –
Nie można obecnie wychwycić wyjątków w Swift, porównaj http://stackoverflow.com/questions/24023112/try-catch-exceptions-in-swift i powiązane pytania. - Niestety, NSExpression (i inne klasy Foundation) nie stosuje się do zaleceń Apple, aby używać parametru błędu zamiast rzucać wyjątki. –
To jest to, czego używa jabłko do obliczeń wbudowanych w reflektorach Mac. Zastanawiam się, czy mogę uzyskać dostęp do wbudowanego parsera, aby sprawdzić ciąg przed przekazaniem go do wyrażenia. – masters3d