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