2016-12-30 15 views
2

У меня есть поле ввода, которое позволяет вводить числа (строка преобразуется в десятичную), но есть случай, когда они могут быть $ an нет номера, в этом случае я хотел бы использовать охранник и всплывать UIAlert, позволяя пользователю узнать об ошибке. Я прочитал, что есть свойство BOOL isNaN для Decimal в Swift 3, но я не совсем уверен, как его использовать. Это то, что я пытаюсьпытается создать защитник, чтобы проверить, возвращается ли вход NaN

guard myDecimalNumber != isNaN else { 
     print("this is not a number show alert") 
    } 

ответ

3

isNan является булево свойство Decimal (и все с плавающей точкой типов), так что вы можете проверить его с

guard !myDecimalNumber.isNaN else { 
    // ... `myDecimalNumber` is NaN ... 
} 

Но обратите внимание, что при создании Decimal из строка возвращает опционально, которая равна nil, если преобразование завершается с ошибкой, поэтому то, что вы, возможно, хотите , является необязательным связыванием:

guard let myDecimalNumber = Decimal(string: textField.text) else { 
    // ... `textField.text` does not represent a number ... 
} 

(и тот же подход работает и для других типов номеров, как Double, Int, ...)

Для правильной обработки локализованных десятичных разделителей, используйте номер форматер в:

guard let myDecimalNumber = formatter.number(from: textField.text)?.decimalValue else { 
    // ... `textField.text` does not represent a number ... 
}