Swift

Extension - 2

dion_K 2020. 12. 14. 17:17
728x90

1.  Adding Initializer

// 년,월,일을 파라미터로 받아서 날짜를 생성하는 생성자를 익스텐션으로 추가해보겠습니다.
extension Date {
    init?(year: Int, month: Int, day: Int) {
        let cal = Calendar.current
        var comp = DateComponents()
        comp.year = year
        comp.month = month
        comp.day = day
        
        guard let date = cal.date(from: comp) else {
            return nil
        }
        
        self = date
    }
}

Date(year: 2020, month: 12, day: 14)


// UI컬러 클래스에 새로운 생성자를 추가해보곘습니다.
// extension으로 클래스에 생성자를 추가할때는 반드시 간편 생성자로 구현해야 합니다.
extension UIColor {
    convenience init(red: Int, green: Int, blue: Int) {
        self.init(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: 1.0)
    }
}

UIColor(red: 0, green: 0, blue: 255)


struct Size {
    var width = 0.0
    var height = 0.0
    
}

extension Size {
    
    init(value: Double) {
        width = value
        height = value
    }
}

Size()
Size(width: 12, height: 34)

2. Adding Subscript

extension String {
    subscript(idx: Int) -> String? {
        guard (0..<count).contains(idx) else {
            return nil
        }
        
        let target = index(startIndex, offsetBy: idx)
        return String(self[target])
    }
}

let str = "Swift"
str[1]
str[100]


extension Date {
    subscript(component: Calendar.Component) -> Int? {
        let cal = Calendar.current
        return cal.component(component, from: self)
    }
}

let today = Date()
today[.year]
today[.month]
today[.day]
728x90