OptionSet

이건준·2023년 1월 10일
0

문제제기

  • 이전에 항상 다양한 경우의 수에 따라서 다른 결과를 내야할 경우 enum형만을 사용해왔다.
  • 하지만 단순한 경우의 수라면 enum만으로 가능할테지만 유동적으로 자유자재 변경하려면 enum은 이에 적합하지않다는 느낌을 받았다

위와 같은 경우에서 해결책으로 OptionSet이라는 것을 알게되었다

OptionSet이란 ?

  • 말 그대로 bitset타입을 나타내기위한 프로토콜이며 단일개 혹은 여러개의 값을 가질 수 있어서 유연함을 요하는 코드에 유용하게 사용될 수 있다
struct InputViewOptions: OptionSet {
  let rawValue: UInt

  static let textCount = InputViewOptions(rawValue: 1 << 0) 
  static let questionMark = InputViewOptions(rawValue: 1 << 1) 
}
  • OptionSet프로토콜은 OptionSet을 채택한 구조체는 rawValue를 필수적으로 구현해야한다
  • 또한 Option에 대한 경우의 수로 rawValue를 비트연산자를 이용하여 구현되어있는 모습을 확인할 수 있다
private let introduceTitleView = InputTextView(
    title: "소개 타이틀",
    placeHolder: "날 좋은날 같이 사진 찍으러 갈 사람~",
    options: [.textCount, .questionMark]
  )
  • 이렇게 구현된 OptionSet은 위처럼 생성자로써 options값으로 원하는 옵션을 추가할 수 있다

0개의 댓글