Ведущие нули для Int в Swift
Я хотел бы преобразовать Int в Swift на a String с ведущими нулями. Например рассмотрим этот код:
for myInt in 1...3 {
print("(myInt)")
}
в настоящее время результатом его является:
1
2
3
но я хочу, чтобы это быть:
01
02
03
есть ли чистый способ сделать это в стандартных библиотеках Swift?
8 ответов:
предполагая, что вы хотите длину поля 2 с ведущими нулями вы бы сделали это:
import Foundation for myInt in 1...3 { print(String(format: "%02d", myInt)) }выход:
01 02 03для этого требуется
import Foundationтаким образом, технически это не часть языка Swift, а возможность, предоставляемаяFoundationосновы. Обратите внимание, что обаimport UIKitиimport CocoaвключитьFoundationпоэтому нет необходимости импортировать его снова, если вы уже импортировалиCocoaилиUIKit.
строка формата может укажите формат нескольких элементов. Например, если вы пытаетесь отформатировать
3часов,15минут и7секунд в03:15:07вы могли бы сделать это вот так:let hours = 3 let minutes = 15 let seconds = 7 print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))выход:
03:15:07
С Swift 4, Вы можете выбрать один из три примера показано ниже, чтобы решить вашу проблему.
#1. Используя
String' sinit(format:_:)инициализатор
FoundationбыстроStringainit(format:_:)инициализатор.init(format:_:)есть следующее объявление:init(format: String, _ arguments: CVarArg...)возвращает a
Stringобъект инициализируется с помощью заданной строки формата в качестве шаблона, в котором остальные значения аргументов подставляются.следующий код игровой площадки показывает, как создать
Stringформатировать сIntпо крайней мере, с двумя целыми цифрами с помощьюinit(format:_:):import Foundation let string0 = String(format: "%02d", 0) // returns "00" let string1 = String(format: "%02d", 1) // returns "01" let string2 = String(format: "%02d", 10) // returns "10" let string3 = String(format: "%02d", 100) // returns "100"
#2. Используя
String' sinit(format:arguments:)инициализатор
FoundationбыстроStringainit(format:arguments:)инициализатор.init(format:arguments:)есть следующее объявление:init(format: String, arguments: [CVarArg])возвращает a
Stringобъект инициализируется с помощью заданного строка форматирования как шаблон, в который подставляются остальные значения аргументов в соответствии с языковым стандартом пользователя по умолчанию.следующий код игровой площадки показывает, как создать
Stringформатировать сIntпо крайней мере, с двумя целыми цифрами с помощьюinit(format:arguments:):import Foundation let string0 = String(format: "%02d", arguments: [0]) // returns "00" let string1 = String(format: "%02d", arguments: [1]) // returns "01" let string2 = String(format: "%02d", arguments: [10]) // returns "10" let string3 = String(format: "%02d", arguments: [100]) // returns "100"
#3. Используя
предоставляетNumberFormatterNumberFormatter. Apple заявляет об этом:экземпляров
NSNumberFormatterотформатируйте текстовое представление ячеек, содержащихNSNumberобъекты и преобразование текстовых представлений числовых значений вNSNumberобъекты. Представление включает в себя целые числа, поплавки и двойники; поплавки и двойники могут быть отформатированы в указанную десятичную позицию.следующий код игровой площадки показывает, как создать
NumberFormatterвозвращаетString?СIntпо крайней мере, с двумя целыми цифрами:import Foundation let formatter = NumberFormatter() formatter.minimumIntegerDigits = 2 let optionalString0 = formatter.string(from: 0) // returns Optional("00") let optionalString1 = formatter.string(from: 1) // returns Optional("01") let optionalString2 = formatter.string(from: 10) // returns Optional("10") let optionalString3 = formatter.string(from: 100) // returns Optional("100")
для левого заполнения добавьте расширение строки следующим образом:
Swift 2.0 +
extension String { func padLeft (totalWidth: Int, with: String) -> String { let toPad = totalWidth - self.characters.count if toPad < 1 { return self } return "".stringByPaddingToLength(toPad, withString: with, startingAtIndex: 0) + self } }Swift 3.0 +
extension String { func padLeft (totalWidth: Int, with: String) -> String { let toPad = totalWidth - self.characters.count if toPad < 1 { return self } return "".padding(toLength: toPad, withPad: with, startingAt: 0) + self } }используя этот метод:
for myInt in 1...3 { print("\(myInt)".padLeft(totalWidth: 2, with: "0")) }
в Xcode 8.3.2, iOS 10.3 Это хорошо сейчас
пример sample 1:
let dayMoveRaw = 5 let dayMove = String(format: "%02d", arguments: [dayMoveRaw]) print(dayMove) // 05Sample2:
let dayMoveRaw = 55 let dayMove = String(format: "%02d", arguments: [dayMoveRaw]) print(dayMove) // 55
подробности
Xcode 9.0.1, swift 4.0
решений
сведения
import Foundation let array = [0,1,2,3,4,5,6,7,8]Решение 1
extension Int { func getString(prefix: Int) -> String { return "\(prefix)\(self)" } func getString(prefix: String) -> String { return "\(prefix)\(self)" } } for item in array { print(item.getString(prefix: 0)) } for item in array { print(item.getString(prefix: "0x")) }решение 2
for item in array { print(String(repeatElement("0", count: 2)) + "\(item)") }решение 3
extension String { func repeate(count: Int, string: String? = nil) -> String { if count > 1 { let repeatedString = string ?? self return repeatedString + repeate(count: count-1, string: repeatedString) } return self } } for item in array { print("0".repeate(count: 3) + "\(item)") }
другие ответы хороши, если вы имеете дело только с числами, используя строку формата, но это хорошо, когда у вас могут быть строки, которые нужно дополнить (хотя, по общему признанию, немного отличается от заданного вопроса, кажется похожим по духу). Кроме того, будьте осторожны, если строка длиннее, чем коврик.
let str = "a str" let padAmount = max(10, str.count) String(repeatElement("-", count: padAmount - str.count)) + strвыход
"-----a str"
В отличие от других ответов, которые используют форматер, вы также можете просто добавить текст " 0 " перед каждым числом внутри цикла, например:
for myInt in 1...3 { println("0" + "\(myInt)") }но formatter часто лучше, когда вам нужно добавить предположим, определенное количество 0s для каждого отдельного числа. Если вам нужно только добавить один 0, то это действительно просто ваш выбор.
Comments