반응형
String Format
String(format: String, _ arguments: CVarArg...)
format
에서는 %d
, %f
, %@
이와 같은 기호를 넣어 변형이 가능하며,
arguments
의 여러 인수들은 $1, $2... 과 같이 취급하여 사용도 가능하다.
정수형 변환 (%d)
Int
형식을 변환할 때 사용합니다. (오직 정수만 사용가능)
let num1 = 123
let num2 = 456
// 변화를 확인하기 위해 []로 구분을 지어줌, 사용 시 [] 제거!
String(format: "[%d]", num1) // [123]
// 숫자가 범위를 넘어가면 앞에 공백 (왼쪽 정렬)
String(format: "[%5d]", num1) // [ 123]
// 숫자가 범위를 넘어가면 뒤에 공백 (오른쪽 정렬)
String(format: "[%-5d]", num1) // [123 ]
// 숫자가 범위를 넘어가면 앞에 0 추가
String(format: "[%.5d]", num1) // [00123]
// 이와 같이도 여러개도 사용이 가능
String(format: "[%d, %d]", num1, num2) // [123, 456]
// 만약 첫 번재 인수와 두 번째 인수와 위치를 바꿔주려면,
// 1$(첫 번째 인수), 2$(두 번째 인수)를 사용하여 위치를 변경이 가능.
String(format: "[%2$d, %1$d]", num1, num2) // [456, 123]
시계가 있다고 생각해보자.
시간이 1~9시 일 때는 한 자릿수이고 나머지는 두 자릿수가 된다.
시간을 두 자릿수 규격으로 통일시켜 만들고 싶을 땐, 어떻게 해야 할까?
// 시간 = 7시 30분 5초
let hours = 7
let minutes = 30
let seconds = 5
// 그냥 출력하게 된다면 이와 같이 될 것이다.
String(format: "%d : %d : %d", hours, minutes, seconds)
// 7 : 30 : 5
// 00:00:00 시간 규격을 만들고 싶을 때
// %02d (문자의 길이는 2, 공백은 0으로 채운다.)
String(format: "%02d : %02d : %02d", hours, minutes, seconds)
// 07 : 30 : 05
문자열 변환 (%@)
String
형식을 변환할 때 사용합니다. (오직 문자열에서만 사용가능)
let firstName = "Daniel"
let lastName = "Yang"
// 각 인수를 받아서 사용 가능 ($1, $2)
let korFormat = "내 이름은 %2$@ %1$@"
let engFormat = "My name is %@ %@"
String(format: korFormat, firstName, lastName)
String(format: engFormat, firstName, lastName)
// 내 이름은 Yang Daniel
// My name is Daniel Yang
실수형 변환 (%f)
Float
또는 Double
형식을 변환할 때 사용합니다. (오직 Float, Double형만 사용가능)
주로 소수점을 변환할 때 사용.
let rNum1: Float = 12.123
let rNum2: Float = 45.456
// 변화를 확인하기 위해 []로 구분을 지어줌, 사용 시 [] 제거!
String(format:"[%f]", rNum1) // [12.123000]
// 소수점 첫 째 자리까지 출력
String(format:"[%.1f]", rNum1) // [12.1]
// 소수점 둘 째 짜리까지 출력
String(format:"[%.2f]", rNum1) // [12.12]
// 문자의 길이는 10개, 소수점 둘 째 짜리 출력 (오른쪽 정렬)
String(format:"[%10.2f]", rNum1) // [ 12.12]
// 문자의 길이는 10개, 소수점 둘 째 짜리 출력 (왼쪽 정렬)
String(format:"[%-10.2f]", rNum1) // [12.12 ]
// 문자의 길이는 10개, 공백을 0으로 채움, 소수점 둘 째 자리까지 출력
String(format:"[%010.2f]", rNum1) // [0000012.12]
// 이와같이 여러 인수 사용가능
String(format:"[%.1f, %.1f]", rNum1, rNum2) // [12.1, 45.5]
// 만약 첫 번재 인수와 두 번째 인수와 위치를 바꿔주려면
// 1$(첫 번째 인수), 2$(두 번째 인수)를 사용하여 위치를 변경이 가능.
String(format:"[%2$.1f, %1$.1f]", rNum1, rNum2) // [45.5, 12.1]
참고
반응형
'Xcode > Swift 문법' 카테고리의 다른 글
[iOS/Swift] 옵셔널(Optional, ?) 정리 (0) | 2023.02.20 |
---|---|
[iOS/Swift] addingPercentEncoding (URL이 nil 일 경우, URL Encoding, CharacterSet) (0) | 2023.02.11 |
[iOS/Swift] URL, URLComponents 빠개기 (0) | 2023.02.11 |
[iOS/Swift] 프로토콜 CaseIterable (열거형에서 모든 case를 배열로 다루기) (2) | 2023.02.09 |
[iOS/Swift] 이니셜라이저(init)와 고차함수 (0) | 2023.02.08 |