Enum 바구니?

주방·2022년 7월 12일
0

Swift

목록 보기
6/17
post-thumbnail

#1. Checklist

  • ValueChanged(feat. Switch, Slider, datePicker)

  • View: tag, alpha, opacity

  • Enumeration

  • RawValue

  • Print vs. Return

  • Tuple

  • 함수의 반환값(feat. shuffle vs. shuffled, subtract vs. subtracting, append vs. appending, etc.)

  • RawString

  • Override vs. Overload


1) 열거형(Enumeration)

  1. 열거형?

    • 우리는 구현시 타입에 대한 문제를 겪곤 한다. 이에 대응하기 위해 열거형이라는 개념을 사용한다.
    • 열거형은 관련된 값으로 이루어진 그룹이다. 이는 하나의 공통된 타입으로 묶었기 때문에 사용할 때 타입의 안정성을 보장할 수 있는 장점이 있다.
  2. 형태

    // 1번째 
    enum Month {
      case jan
      case feb
      case mar
      case apr
    }
    
    // 2번쨰
    enum Month {
      case jan, feb, mar, apr
    }
    
    var birth = jan
    
    // switch와 묶어서 사용
    // default를 사용하지 않는다.
    switch birth {
      case .jan:
      	print("생일이다")
      case .feb, .mar:
      	print("2월, 3월이다.")
      case .apr:
      	print("중간고사다")
    }
  3. 원시값(RawValue)

    • enum의 case에 값을 저장할 수 있다.
    • 가능한 형태는 String, Character, Interger, Float 등의 형을 사용할 수 으며, 값은 중복되어서는 안된다.
    • 더불어 값을 별도로 입력하지 않으면, 자동으로 값이 할당되어 있다.
  4. 초기화(Initializing from a Raw Value)

    • raw 값을 이용해 변수를 초기화 할 수 있으며 연결해 조건문 작성이 가능하다.
    let testMonth = Month(rawValue: 3) // apr
    
    // 조건을 줄수도 있다.
    let studyMonth = 4
    if let vacationMonth = Month(rawValue: studyMonth){
      switch vacationMonth {
        case .jan:
        	print("생일이다.")
        default:
        	print("1, 2, 3, 4월 중에 하나.")
      } else {
        print("아무 행사 없는 달 \(studyMonth)")
      }
    }
    // 아무 행사 없는 달이 표기됨.

2) Raw Strings(Swift5)

  1. 등장배경 (참고1, 참고2)

    • String을 표현하는데 있어 " , \ 을 String 문자열에 포함시킬 수 없기 때문에 이를 표현하기 위해 등장했다.
    • 왜 안될까?
      • " , \ 이 두가지 문자의 경우 예약어 이기 때문에 사용할 수 없음.
      • " : 문자의 시작과 끝을 알리는 경계문자(String delimiter)로 사용되고 있음.
      • \ : 이스케이프(Escape delimiter)문자로 사용(개행, 값 포함 등)
      • 특히, 정규표현식을 사용할 때, 표현하고자 하는 값의 변형이 일어난다.
  2. 그렇다면, 이 Raw String 을 어떻게 사용할까?

    • 작성하고자 하는 문자열의 앞뒤에 #을 붙인다.

      let menu: String = #"i like \pizza."#
      let menu: String = #"i love "rice."#
    • 매우 간단하다!

  3. 개행은 가능할까?

    • 기존의 개행 \n 사이에 #을 추가하면 된다.

      let travel: String = #"i want to go \#nBerlin"#
      print(travel) 
      // i want to go 
      // Berlin
    • 사용시 앞 뒤, 사이에 사용하는 #의 갯수는 동일해야함.



#2. Assignment



#3. 회고

  • 레이아웃에 대한 계속된 실습을 진행하고 있다. 비율을 통해서 해당 각 뷰의 자리를 잡아가는 것이 구체적으로 잘 그려지지 않는다. 다른 예제를 통해서 적용해봐야겠다. 스토리 보드를 통해 Autolayout, Constraint를 머릿속으로 구체화 하는 것이 중요하다.
  • 이전 과제(신조어, 감정다이어리 등)를 진행할 때, 여러 타입(특히, dic)의 상수가 메서드 안에서 반복적으로 작업되었다. 파라미터나 tag, enum 등을 통해 중복된 값이나 별도로 빼놓을 수 있는 값을 어떤식으로 처리하면 좋을지 접근이 어려웠는데, 점차 적용이 되는 것 같아 기쁘다.
  • enum의 경우 rawValue의 특정 타입을 지정하여 사용하니 효과적으로 쓸 수 있었다. 특히, 타입을 지정한다는 점에서 표현할 수 있는 가능성을 제한하고 사용하니 오히려 오류 발생을 제어할 수 있을 것 같았다.

0개의 댓글