[Swift] UIAccessibilityTraits 초기화가 이상한데요? (feat. OptionSet에 대하여)
기존 상황
UIView
extension에 accessibilityTraits
를 설정해주는 함수가 있다고 해봅시다
func setAccessibility(traits: UIAccessibilityTraits) {
self.accessibilityTraits = traits
}
저는 요런식으로 쓰고 있었구요
view.setAccessibility(traits: .button)
추가 요구 사항
그러다가 trait를 여러개 넘기고 싶은거예요..? 흠.. 여러개 넘기려면..
func setAccessibility(traits: UIAccessibilityTraits...)
요런식으로 parameter를 variadic parameter 로 바꿔야하나..? 하고 고민을 했쥬
어쩌다 마주친 Build Succeeded
그러다가 그냥 Array 형식으로 한번 넘겨봤어요!
view.setAccessibility(traits: [.button, .selected])
음 컴파일 에러나 나겠지~~ 하고 기다리고 있었는데.. 결과는?!
??????????? 혼란… 단일 값도 넘길 수 있고, 어레이도 넘길 수 있다고요????
머 이ㄸㅏ위 문법이 다있어..!!! 쉬익 쉬익거리면서 UIAccessibilityTraits
들어가봤쥬?
흠 뭔가 Set
을 보아하니 이거랑 관련 되어있을거 같네요. 그럼 애플 문서 ㄱㄱ
OptionSet (protocol)
bitset 타입을 위한 set interface라는데.. 일단 ㅇㅋㅇㅋ.. 넘어가고 제가 원하는 정보는 밑에 있었어요
Using an Option Set Type
OptionSet
의 인스턴스는 생성할 수 있는 방법은 여러개임 ㅇㅇ
OptionSet
의 static 멤버 중 하나를 할당
let singleOption: ShippingOptions = .priority
2. OptionSet
의 static 멤버가 여러개인 Array Literal 할당
let multipleOptions: ShippingOptions = [.nextDay, .secondDay, .priority]
3. Empty Array Literal 할당
let noOptions: ShippingOptions = []
대박적.. 대박적.. 애초에 문법이 이래서 인자를 다른 형식으로 넘겨도 에러가 안났던거였군여
view.setAccessibility(traits: .button)
view.setAccessibility(traits: [.button, .selected])
추가로 기본적으로 얘는 set
이기 때문에 contains
, insert
, remove
등의 작업을 할 수 있습니다!
그렇기 때문에 요렇게 단일 값으로 초기화 되었어도, insert 할 수 있단 말씀~
var freeOptions: ShippingOptions = .nextDay
freeOptions.insert(.priority)
마무리
크크.. UIAccessibilityTraits
가 복수형인데는 다 이유가 있었던거임…?! 얘 자체가 일종의 Set
이었던 것임..
그럼 급한 마무리.. 안녕!