Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Refactoring
- combine
- MVVM
- ribs
- SWIFT
- uiscrollview
- 애니메이션
- UICollectionView
- Human interface guide
- 스위프트
- Protocol
- 리팩토링
- swift documentation
- 리펙터링
- ios
- Observable
- Clean Code
- swiftUI
- clean architecture
- map
- collectionview
- RxCocoa
- HIG
- uitableview
- rxswift
- tableView
- 클린 코드
- 리펙토링
- UITextView
- Xcode
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] Base64 String 사용 방법 본문
Base64란?
- Base64는 64진법으로 (=8비트) 이루어진 데이터
- ASCII 영역의 문자들로만 이루어진 문자열로 바꾸는 인코딩 방식
* 인코딩: 파일에 저장된 형태, 형식을 데이터 표준화 및 처리 속도 향상을 위해 다른 형태로 변환하는 처리 - Base64인코딩은 24bit의 buffer를 생성하여 바이트 데이터를 넣은 뒤, 6bit 단위로 잘라 ASCII 문자로 변환
Base64 특징
- 장점
- 통신과정에서 바이너리 데이터의 손실을 막기 위함
- (base64없이 ASCII인코딩만 사용할때, ASCII는 7 bit eonciding이지만 1bit를 처리하는 방식이 시스템별로 상이하기 때문에 데이터의 손실할 수 있는 가능성이 존재)
- 일부 제어 문자 (\n와 같은 문자)의 경우 시스템 별로 다른 코드값을 가지고 있는 점이 존재
base64는 ASCII중 제어 문자와 일부 특수문자를 제외한 64개의 안전한 출력 문자만 사용
- 단점
- Base64 인코딩 시 6bit당 2bit의 Obserhead가 발생하여 데이터 크기의 약 33%정도 증가
Swift에서 Base64 사용 방법
- Data()를 base64String으로 변경하기
- swift내부에서 제공
@inlinable public func base64EncodedString(options: Data.Base64EncodingOptions = []) -> String
그대로 사용)
// Data -> base64 String
let data = Data()
let base64String = data.base64EncodedString()
- String -> Base64Data
- extension String으로 따로 정의하여 사용
- swift 내부에서 지원하는 Data 메소드인 base64EncodedData() 사용
- String -> utf8 데이터로 변경 -> base64EncodedData()로 변경
extension String {
var base64Data: Data? {
let utf8Data = self.data(using: .utf8)
return utf8Data?.base64EncodedData()
}
}
// String -> base64 Data
let someString = "someString"
let base64Data = someString.base64Data
print(base64Data) // Optional(16 bytes)
- String -> base64String
- extension String으로 따로 정의하여 사용
- swift 내부에서 지원하는 Data 메소드인 base64EncodedString() 사용
extension String {
var asBase64: String? {
let utf8Data = self.data(using: .utf8)
return utf8Data?.base64EncodedString()
}
}
// String -> base64String
let someString = "someString"
let base64String2 = someString.asBase64
print(base64String2?.asBase64) // Optional("c29tZVN0cmluZw==")
- base64, data 비교
// String -> base64 Data
let someString = "someString"
let base64Data = someString.base64Data
// String -> base64String
let base64String2 = someString.asBase64
print(base64Data?.base64EncodedString() == base64String2?.asBase64) // true
주의) 중간에 utf로 변경하지 않으면, String를 data로 변경될할때 nil이 되므로 주의할것
* 잘못된 코드
// String이 base64형태가 아니므로 Data로 변경할때 nil이 됨 (utf로 먼저 변경 필요)
extension String {
var base64Data: Data? {
Data(base64Encoded: self)
}
var base64String: String? {
self.base64Data?.base64String
}
}
* 전체 코드: https://github.com/JK0369/ExBase64String
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments