[TIL] Formatter

rbw·2024년 1월 15일
0

TIL

목록 보기
96/97

Formatter - kxcoding 유튭 영상

https://www.youtube.com/watch?v=xqjG8QLpMTM

유튭 강의 돌아댕기다가 시간, 분 처리하는 코드 좋은듯해서 적어봄 여러 국가에서 사용이 가능하기 때문에 하드코딩으로 몇 시 몇 분 이런 짓 안해두댐

let formatter = DateComponentsFormatter()

formatter.allowedUnits = [.hour, .minute]
formatter.unitStyle = .full
foramtter.string(from: TimeInterval(7000))
// OUTPUT, 한글로 설정된 아이폰에서 하면 1시간 56분 으로 나옴
1 hour, 56minutes

이 모델링 기초 강의에서 모델 만들 때 보면, 구조체 내부에서 서버에 이미지 요청하기 위한 url 주소를 저장하고 있슴니다. urlstr, url 이렇게 두 개의 프로퍼티를 만들었고 이유는 string 매번 url로 타입 변환을 안 해도 되기 때문에 코드를 간소화할 수 있슴니다.

그리고 url로 변환할 string을 담을 imageUrlStr에는 원본 데이터를 저장하지만, 사용할 imageUrl은 computed property 으로만들어서 사용할 때만 계산되게 만들어서 메모리 사용을 줄였음..! 계산 프로퍼티는 요렇게 사용하는게 좋군여

struct course {
	...
	let imageUrlStr: String
	// read-only computed property
	var imageUrl: URL? { 
		guard let str = imageUrlStr else { return nil }
		return URL(string: str)
	}
}

가격관련해서도 소수점을 표현해야하는 나라들도 있슴니다. 한국은 정수로 딱 떨어지기때문에 크게 상관이 없지만 외국의 경우 소수점이 있을 확률이 있기 때문에 모델에서 가격 부분도 Double로 타입을 주고 사용할 때 포맷하는게 좋슴니다.

let formatter = NumberFormatter()
formatter.numberStyle = .currency // 설정된 지역에 맞게 포매팅
formatter.locale = Locale(identifier: "ko_KR") // 지역 상관없이 사용하려면 이처럼 사용 ㄱㄴ

tip: UILabel의 text는 String? 임. 그래서 모델에서 사용할 string들도 옵셔널로 하는게 더 편한 경우가 이씀, SwiftUI에서는 non-optional이 낫다 대부분

let formatter = DateFormatter()
formatter.dateStyle = .full
formatter.timeStyle = .none // 최종 문자열에서 시간을 뺌

foramtter.dateFormat = "M월 d일 ㅎㅇ" // 원하는 포맷으로 ㄱㄴ

dateformatterexample 사이트 : https://nsdateformatter.com/#examples 요기 gooood

// enum 활용 version
// ex)1기 모집중 2기 개강완료 등등
let status: CampStatus
let generation: Int

var statusString: String? {
	switch status {
		case .preparing:
			return "\(generation)기 준비 중"
		case .onGoing:
			return "\(generation)기 개강 중"
		case .ended:
			return "\(generation)기 종강"
		...
	}
}

// 개선할 부분 - 미리 enum의 RawValueType을 String으로 채택하고
// rawValue를 사용하면 좀 더 깔끔했을듯 
var statusString: String? {
   return "\(generation)기 "
}
profile
hi there 👋

0개의 댓글