รูปแบบการตกแต่งใน Swift

Feb 04 2023
รูปแบบการตกแต่งใน Swift ช่วยให้คุณเพิ่มฟังก์ชันเพิ่มเติมให้กับออบเจกต์ไดนามิกโดยไม่ส่งผลกระทบต่อพฤติกรรมของออบเจ็กต์อื่นจากคลาสเดียวกัน รูปแบบนี้มักใช้ในการพัฒนา iOS เพื่อเพิ่มลักษณะการทำงานที่กำหนดเองให้กับส่วนประกอบ UI

รูปแบบการตกแต่งใน Swift ช่วยให้คุณเพิ่มฟังก์ชันเพิ่มเติมให้กับออบเจกต์ไดนามิกโดยไม่ส่งผลกระทบต่อพฤติกรรมของออบเจ็กต์อื่นจากคลาสเดียวกัน รูปแบบนี้มักใช้ในการพัฒนา iOS เพื่อเพิ่มลักษณะการทำงานที่กำหนดเองให้กับส่วนประกอบ UI

ฉันได้สร้างตัวอย่างในโลกแห่งความเป็นจริงด้านล่าง:

protocol LabelDecorator {
    func decorate(label: UILabel)
}

class ShadowDecorator: LabelDecorator {
    func decorate(label: UILabel) {
        label.layer.shadowOpacity = 0.5
        label.layer.shadowRadius = 3
        label.layer.shadowOffset = CGSize(width: 3, height: 3)
    }
}

class BorderDecorator: LabelDecorator {
    func decorate(label: UILabel) {
        label.layer.borderWidth = 2
        label.layer.borderColor = UIColor.black.cgColor
    }
}

class DecoratedLabel {
    let label: UILabel
    let decorators: [LabelDecorator]
    
    init(label: UILabel, decorators: [LabelDecorator] = []) {
        self.label = label
        self.decorators = decorators
    }
    
    func applyDecorators() {
        decorators.forEach { $0.decorate(label: label) }
    }
}

// Usage
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
label.text = "Hello, World!"

let decoratedLabel = DecoratedLabel(label: label, decorators: [ShadowDecorator(), BorderDecorator()])
decoratedLabel.applyDecorators()

ติดตามฉันบน Twitter สำหรับการสอนแบ่งปันความรู้ประเภทนี้