THIS IS ELLIE

Swift Extensions 본문

개발/Swift

Swift Extensions

Ellie Kim 2024. 5. 3. 03:29

안녕하세요 : - )

오늘은 제가 자주 사용하는 3가지
Extensions들을 소개하려 합니다

 

isNotEmpty

혹쉬
배열, 집합, 딕셔너리의 collection이 비었는지 확인하려면 어떻게 하시나요?
isEmpty를 호출해서 사용하시나요????
(count == 0은 아니라고 하셈 ,, 이유는 여기에 https://hyerios.tistory.com/27)

 

그렇다면 비지 않았는지 확인은 어떻게 확인하시나요?
!isEmpty 이렇게 하시나요???
(count != 0도 아니라고 하셈 ,,)

 

extension Collection {
    var isNotEmpty: Bool {
        isEmpty == false
    }
}

 

저는 collection이 비지 않았을 때를 확인하기 위해서
위와 같이 Collection을 extension 해서 isNotEmpty를 정의해서 사용하고 있어요
(이유는? 지극히 개인적으로 !isEmpty는 직관적이라고 생각 들지 않아서요)

 

이렇게 isNotEmpty를 정의해 놓으면?
Array, Set, Dictionary모두 Collection 프로토콜을 따르고 있기 때문에 모두에서 사용할 수 있어요

 

직접 사용해 볼게요
person이라는 문자열 배열을 만들었고
isNotEmpty를 사용해 보려니 정의해 둔 isNotEmpty가 노출되게 됩니다

 

둘 다 동일한 역할을 코드이지만 어떤 코드가 더 잘 읽히나요?

ㅇㅇ 난 1번
ㄴㄴ 난 2번

 

Safe Index

다들 한 번쯤은 배열에 인덱스 잘 못 넣어서 크래시 만난 경험 다들 있죠???

 

크래시도 막고 안전하게 Element를 얻기 위해
아래와 같이 Array를 extension 해서 사용하면 좋아요 

extension Array {
    subscript(safe index: Index) -> Element? {
        return indices.contains(index) ? self[index] : nil
    }
}

 

이렇게 하면 찾고자 하는 인덱스가
배열의 범위 내에 있으면 해당하는 Element를 리턴해주고
그렇지 않으면 nil을 리턴해주게 됩니다

 

안전 코딩 하세요

 

Hex Color Code

16진수 값으로 색상을 생성해야 하는 경우!!!에는

extension UIColor {
    convenience init(hex: UInt32, alpha: CGFloat = 1.0) {
        let red = CGFloat((hex & 0xFF0000) >> 16) / 255.0
        let green = CGFloat((hex & 0x00FF00) >> 8) / 255.0
        let blue = CGFloat(hex & 0x0000FF) / 255.0
        self.init(red: red, green: green, blue: blue, alpha: alpha)
    }
}

이렇게 UIColor를 exntesion 해서 사용하면 편하더라구요

 

let color = UIColor(hex: 0x112233)

이렇게 사용하시면 됩니다
편-안

반응형

'개발 > Swift' 카테고리의 다른 글

클래스 싱글톤 vs 구조체 싱글톤  (2) 2021.12.05
스위프트 Combination  (0) 2021.07.02
스위프트 Intersperse함수  (0) 2021.05.30
스위프트 mutating 키워드  (0) 2020.11.12
스위프트 배열 크기  (0) 2020.11.09