본문 바로가기
Swift/기초

36. 스위프트 기초 문법[Modeling(2) - Formatters]

by UDDT 2025. 2. 11.

Swift/기초 카테고리에 업로드한 모든 내용은 KxCoding 기초 강의를 토대로 작성하였습니다.

 

⎮ Formatter 이해하기

let formatter = NumberFormatter()          // 인스턴스 생성
formatter.minimumFractionDigits = 0        // 소수 부분이 0일 때, 소수 부분은 빼고 정수만 표현
formatter.maximumFractionDigits = 1        // 최대 자리수 결정. 소수 1자리까지만 표시하는 코드

print(formatter.string(for: 4.234567))
//optional("4.2")

print(formatter.string(for: 4.0))
//optional("4")
let formatter = DateComponentsFormatter()         // 인스턴스 생성

formatter.allowedUnits = [.hour, .minute]      // .hour, .minute을 통해 유닛 지정
formatter.unitsStyle = .full                  // n시간, n분으로 줄이지 않고 full text로 표현해줌

print(formatter.string(from: TimeInterval(3300)))
//optional("55 minutes")

https://developer.apple.com/documentation/foundation/formatter

 

Formatter | Apple Developer Documentation

An abstract class that declares an interface for objects that create, interpret, and validate the textual representation of values.

developer.apple.com

 

⎮ 리뷰 태그 만들기

예시 이미지

 

  1. 코드 추가

    let reviewScore: Double?   //점수는 소수점이니까 Double로, 점수가 없는 강의도 있으니까 optional로

 

  2. 속성을 추가하여 리뷰점수를 적절하게 포매팅하기 위한 코드 추가

    let reviewScore: Double?         //리뷰 점수가 없는 강의도 있으니까 optional로
    var reviewScoreStr: String? {
        guard let score = reviewScore else { return nil }
        }

 

  3. Formatter 인스턴스 생성

 

  4. 소수점 설정하는 코드 추가

    let reviewScore: Double?         //리뷰 점수가 없는 강의도 있으니까 optional로
    var reviewScoreStr: String? {
        guard let score = reviewScore else { return nil }

        let formatter = NumberFormatter()          // 인스턴스 생성
        formatter.minimumFractionDigits = 0        // 소수 부분이 0일 때, 소수 부분은 빼고 정수만 표현
        formatter.maximumFractionDigits = 1        // 최대 자리수 결정. 소수 1자리까지만 표시하는 코드
    }

 

  5. 메소드 호출 후 문자열로 포매팅

    let reviewScore: Double?         //리뷰 점수가 없는 강의도 있으니까 optional로
    var reviewScoreStr: String? {
        guard let score = reviewScore else { return nil }

        let formatter = NumberFormatter()          // 인스턴스 생성
        formatter.minimumFractionDigits = 0        // 소수 부분이 0일 때, 소수 부분은 빼고 정수만 표현
        formatter.maximumFractionDigits = 1        // 최대 자리수 결정. 소수 1자리까지만 표시하는 코드

        return formatter.string(for: score)        // string(for:) 메소드 호출 후 문자열로 포매팅해서 return
    }

 

⎮ 다양한 태그 추가하기

  * 회원의 경우 수료증 발급, 비회원의 경우 수료증 미발급(Boolean Type으로 구현)

 

  1. 코드 추가

    let isCertificationAvailable: Bool       // 수료증 발급 유무를 알려주는 태그

    let isFree: Bool      // 무료 여부를 알려주는 태그

    let lectureCount: Int       // 강의 개수를 알려주는 태그

    let totalDuration: Int     // 전체 재생 시간을 알려주는 태그

 

  2. 전체 시간을 계산하기 위해 계산 속성 추가

    let isCertificationAvailable: Bool       // 수료증 발급 유무를 알려주는 태그

    let isFree: Bool      // 무료 여부를 알려주는 태그

    let lectureCount: Int       // 강의 개수를 알려주는 태그

    let totalDuration: Int     // 전체 재생 시간을 알려주는 태그
    var totalDurationStr: String? {

    }

 

  3. formatter 활용하기

        let formatter = DateComponentsFormatter()

        formatter.allowedUnits = [.hour, .minute]     // .hour, .minute을 통해 유닛 지정
        formatter.unitsStyle = .full              // n시간, n분으로 줄이지 않고 full text로 표현해줌

        return formatter.string(from: TimeInterval(totalDuration))

 

⎮ 목록의 순서 정하기

  1. 코드 추가

    let priority: Int

 

  2. 각 강좌별 상세페이지를 구현하려면, 개별 모델을 각각 구분할 수 있게 해야함(중복되지 않는 속성으로)

      * 예를 들면 정수나 title이나, UUID 등. 대부분은 정수를 사용함

    let courseId: Int

 

  3. 특정회원에게만 공개되는 강의도 있으므로, 공개 유무 속성 추가

    let isPublic: Bool

 

 

  + 챗 GPT 활용해서 속성 이름 추천받기

 

+ UUID(범용 고유 식별자) : 전 세계적으로 유니크한 식별자(문자열. 36개 문자로 8-4-4-4-12 형태)

 

 

최근댓글

최근글

skin by © 2024 ttuttak