본문 바로가기
Swift/기초

38. 스위프트 기초 문법[Modeling(4) - Camp 모델링]

by UDDT 2025. 2. 17.

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

 

최근댓글

최근글

skin by © 2024 ttuttak