2014-10-25 2 views
0

Я хотел бы создать функцию, которая смотрит на строку, и если она является десятичной строкой, возвращает ее как строку, форматированную в валюте. Ниже функция делает это, однако, если я передать строку, которая уже отформатировано, он будет не в состоянии, конечно (он ожидает увидеть строку как «25» или '25 .55' но не „$ 15,25“Проверьте, является ли строка уже валютной строкой?

Есть ли способ изменить мою функцию ниже, чтобы добавить другое условие, в котором говорится: «Если вы уже отформатированы как строка валюты или ваша строка не в правильном формате, верните X» (возможно, X будет 0, или, может быть, это будет сам (тот же строка) я пока не уверен).

func toCurrencyStringFromDecimalString() -> String 
{ 
    var numberFormatter = NSNumberFormatter() 
    numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

    if (self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0) 
    { 
     //If whitespace is passed in, just return 0.0 as default 
     return numberFormatter.stringFromNumber(NSDecimalNumber(string: "0.0"))! 
    } 
    else if (IS_NOT_A_DECIMAL_OR_ALREADY_A_CURRENCY_STRING) 
    { 
     //So obviously this would go here to see if it's not a decimal (or already contains a current placeholder etc) 
    } 
    else 
    { 
     return numberFormatter.stringFromNumber(NSDecimalNumber(string: self))! 
    } 
} 

Спасибо за вашу помощь!

ответ

2

Похоже, вам нужно использовать NSScanner.

Согласно docs, то scanDecimal функция NSScanner:

Пропуски последние лишние цифры в случае переполнения, так положение приемника прошло всего целочисленного представления.

Вызовите этот метод с NULL как значение, чтобы просто просмотреть прошлое десятичное целочисленное представление.

Я в основном программирование в Obj-C, так мой Swift мусор, но вот моя попытка перевода соответствующий код для обнаружения числовых строк (как и показано в this answer):

let scanner: NSScanner = NSScanner(string:self) 
let isNumeric = scanner.scanDecimal(nil) && scanner.atEnd 

Если строка не является десятичным представлением, isNumeric должен возвращать значение false.

+0

Это был такой полезный, хорошо сложенный ответ Lyndsey. спасибо за вашу помощь в том, чтобы помочь мне в этом. :) – NullHypothesis

+0

@ user3379785 Нет проблем :) –

+0

Отредактировано для синтаксиса –

Смежные вопросы