2016-05-26 3 views
0

Я хотел бы форматировать строку с цифрами, чтобы выглядеть следующим образом: XX XX XX (например, 12 34 56)NSNumberFormatter группировки

Я использую NSNumberFormatter с группировкой сепаратора:

let formatter = NSNumberFormatter() 
formatter.usesGroupingSeparator = true 
formatter.groupingSize = 2 
formatter.groupingSeparator = " " 
if let number = Int(theText.stringByReplacingOccurrencesOfString(" ", withString: "")) { 
     let numberToFormat = NSNumber(integer:number) 
     textField.text = formatter.stringFromNumber(numberToFormat) 
} 

Это будет работать хорошо, если вы введите номер 123456 - он отформатирован до 12 34 56

Я использую это внутри метода shouldChangeCharactersInRange, поэтому он должен форматировать номер по мере ввода. Группировка разделителя определяет номера сгруппированы по groupingSize значения с правой стороны, поэтому, когда вы вводите в 123456 это как текст изменение:

1 
12 
1 23 
12 34 
1 23 45 
12 34 45 

, и я хотел бы, чтобы отформатировать его следующим образом:

1 
12 
12 3 
12 34 
12 34 5 
12 34 56 

ли можно определить, из каких групп групп разделителей групп?

ответ

1

Не уверен, что вам нужно скрывать до Int, как насчет добавления «0» в конце? Затем удалите последний «0».

let formatter = NSNumberFormatter() 
formatter.usesGroupingSeparator = true 
formatter.groupingSize = 2 
formatter.groupingSeparator = " " 

var str = "12345" 
if str.characters.count % 2 != 0 { 
    str += "0" 
} 
if let number = Int(str.stringByReplacingOccurrencesOfString(" ", withString: "")) { 
    let numberToFormat = NSNumber(integer:number) 
    formatter.stringFromNumber(numberToFormat) 
} 

Другое решение:

let string = "12345" 

var results = [String]() 
for index in 0 ..< string.characters.count-1 { 
    if index % 2 == 0 { 
     let range = NSRange(location: index, length: 2) 
     results.append((string as NSString).substringWithRange(range)) 
    } 
} 

if string.characters.count % 2 != 0 { 
    let last = (string as NSString).substringFromIndex(string.characters.count-1) 
    results.append(last) 
} 
+0

это отличная идея, чтобы добавить 0 в конце, и удалить его потом, спасибо! – gvuksic