iOS 15.5, Xcode 13.31, Swift 5, UIKit 환경에서 진행했습니다.
let text: String = String(describing: sender.userInfo!["text"]!)
Notification userInfo 타입이 [AnyHashable: Any]? 이어서 밸류 값 Any 타입을 형변환 해주었습니다.
위 코드에서 `sender.userInfo!["text"]!` 부분은 Notification 객체에서 userInfo 딕셔너리로부터 "text" 키에 해당하는 값을 가져오는 부분입니다. 그러나 이 값은 Any 타입으로 반환됩니다. Any 타입은 Swift의 모든 타입을 나타낼 수 있는 타입으로, 타입 안정성을 보장하지 않습니다. 따라서 이 값을 String으로 사용하려면 Any 타입을 String 타입으로 형변환해주어야 합니다.
Notification은 iOS에서 발생하는 이벤트를 다른 객체에게 알리기 위한 메커니즘을 제공합니다. userInfo는 Notification 객체에 추가적인 정보를 담을 수 있는 딕셔너리입니다. 이 딕셔너리의 키는 AnyHashable 타입, 값은 Any 타입이 될 수 있습니다. 따라서 이 딕셔너리에서 값을 추출하여 사용할 때에는 타입 안정성을 고려하여 형변환을 해주어야 합니다.
AnyHashable은 Swift의 모든 타입을 나타낼 수 있는 해시 가능한(any hashable) 타입입니다. 이 타입은 딕셔너리의 키로 사용될 수 있습니다. Any 타입은 Swift의 모든 타입을 나타낼 수 있는 타입이지만 해시 가능하지 않은 타입이 존재할 수 있습니다. 따라서 Any 타입은 딕셔너리의 키로 사용될 수 없습니다.
위 내용을 바탕으로, iOS 앱 개발에서 Notification 객체와 userInfo 딕셔너리를 사용할 때, Any 타입과 AnyHashable 타입의 차이점을 이해하고 타입 안정성을 고려하여 적절한 형변환을 수행해야 합니다.
'iOS > 코드조각' 카테고리의 다른 글
[iOS, Swift] Object to Dictionary 형변환 (0) | 2023.03.24 |
---|---|
[iOS, Swift] 싱글턴 구현 (0) | 2023.03.23 |
[iOS, Swift] UILabel Highlight 효과주기 (0) | 2023.03.19 |
[iOS, Swift] UILabel 여러 줄 표현하기 (0) | 2023.03.18 |
[iOS, Swift] UILabel 밑줄 추가하기 (0) | 2023.03.17 |