⎮ Camp 모델링
1. 코드 추가
struct Camp {
let campId: Int
let title: String
let subtitle: String
let cardImageUrlStr: String
// let cardImageUrl: URL
var cardImageUrl : URL? {
URL(string: cardImageUrlStr)
}
let thumbnailImageUrlStr: String?
var thumbnilImage : URL? {
guard let str = thumbnailImageUrlStr else {
return nil
}
return URL(string: str)
}
let reviewScore: Double?
var reviewScoreStr: String? {
guard let score = reviewScore else { return nil }
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 1
return formatter.string(for: score)
}
let isCertificationAvailable: Bool
}
2. 속성 추가 * 캠프는 개강날짜와 종강 날짜가 정해져 있기 때문에, 속성을 각각 추가
let startDate: Date
let endDate: Date
3. startDate 계산 속성 추가 * 이 부분을 Swift UI에서 코딩할 때는 Non-optional String으로 작업하는 것이 편함
let startDate : Date
var startDateString: String? {
let formatter = DateFormatter()
// formatter.dateStyle = .full
// formatter.timeStyle = .none
formatter.dateFormat = "M월 d일 개강"
formatter.locale = Locale(identifier: "Ko_kr")
return formatter.string(from: startDate)
}
4. endDate 계산 속성 추가
let endDate: Date
var endDateString: String? {
let formatter = DateFormatter()
formatter.dateFormat = "M월 d일 개강"
formatter.locale = Locale(identifier: "Ko_kr")
return formatter.string(from: endDate)
}
5. 온라인 버튼을 위한 코드 추가
let isOnlineCamp: Bool
6. 오프라인일 때 약도 나오게 추가하기 * 지도의 url 표시하도록 구현
let locationUrl: URL?
+ 아이폰 지도로 공유하려면? (좌표를 전달하면 됨)
let latitude: Double?
let longitude: Double?
7. 열거형으로 캠프의 5가지 상태 세팅하기 * 캠프의 5가지 상태(개강준비중 / 모집중 / 모집 마감/ 개강 중 / 종강)
enum campStatus {
case preparingForOpening
case recruiting
case recruitingEnded
case onGoing
case ended
}
8. 캠프 상태 태그 구현하기 위한 코드 추가
let status : CampStatus
9. 기수를 나타내기 위한 속성 추가
let generation: Int
10. 계산 속성 추가(2개의 속성을 하나로 묶어서 포맷팅)
var statusString: String? {
switch status {
case .preparingForOpening:
return "\(generation)기 개강 준비중"
case .recruiting:
return "\(generation)기 모집 중"
case .recruitingEnded:
return "\(generation)기 모집 마감"
case .onGoing:
return "\(generation)기 개강 중"
case .ended:
return "\(generation)기 종강"
}
}
11. 코드 추가
let priority: Int
let isPublic: Bool
let period: Int?
let price: Double?
let discountedPrice: Double?
var priceString: String? {
guard let price else { return "무료" }
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "Ko_kr")
if let discountedPrice {
return formatter.string(for: discountedPrice)
}
return formatter.string(for: price)
}
⎮ + 날짜 포맷팅 참고하기(NSDateFormatter)
https://www.nsdateformatter.com/
NSDateFormatter.com - Live Date Formatting Playground for Swift
Sat, 15 Feb 2025 08:25:15 +0000 E, d MMM yyyy HH:mm:ss Z
www.nsdateformatter.com
'Swift > 기초' 카테고리의 다른 글
39. 스위프트 기초 문법[Modeling(5) - Camp 모델 개선] (0) | 2025.02.18 |
---|---|
37. 스위프트 기초 문법[Modeling(3)] (0) | 2025.02.17 |
36. 스위프트 기초 문법[Modeling(2) - Formatters] (0) | 2025.02.11 |
35. 스위프트 기초 문법[Modeling(1) - 모델링 기초와 다양한 속성들] (0) | 2025.02.11 |
34. 스위프트 기초 문법[Type(3) - 클래스, 열거형 활용] (0) | 2025.02.07 |