Extensions
1. Giới thiệu
Phần tiêu đề “1. Giới thiệu”Extensions thêm functionality vào types có sẵn.
2. Thêm Computed Properties
Phần tiêu đề “2. Thêm Computed Properties”extension Double { var km: Double { self * 1000.0 } var m: Double { self } var cm: Double { self / 100.0 }}
let distance = 5.kmprint(distance) // 5000.03. Thêm Methods
Phần tiêu đề “3. Thêm Methods”extension Int { func squared() -> Int { return self * self }
mutating func square() { self *= self }}
print(5.squared()) // 25
var num = 4num.square()print(num) // 164. Thêm Initializers
Phần tiêu đề “4. Thêm Initializers”extension CGRect { init(center: CGPoint, size: CGSize) { let origin = CGPoint( x: center.x - size.width / 2, y: center.y - size.height / 2 ) self.init(origin: origin, size: size) }}5. Conform to Protocol
Phần tiêu đề “5. Conform to Protocol”protocol Describable { var description: String { get }}
extension Int: Describable { var description: String { "Number: \(self)" }}
print(42.description) // Number: 426. Extension với where
Phần tiêu đề “6. Extension với where”extension Array where Element: Numeric { var sum: Element { reduce(0, +) }}
print([1, 2, 3, 4, 5].sum) // 157. Nested Types
Phần tiêu đề “7. Nested Types”extension Int { enum Kind { case negative, zero, positive }
var kind: Kind { switch self { case 0: return .zero case let x where x > 0: return .positive default: return .negative } }}
print(5.kind) // positiveprint((-3).kind) // negative8. Extension cho Protocol
Phần tiêu đề “8. Extension cho Protocol”protocol Greetable { var name: String { get }}
extension Greetable { func greet() { print("Hello, \(name)!") }}
struct Person: Greetable { var name: String}
Person(name: "Alice").greet() // Hello, Alice!9. Tổ chức code với Extension
Phần tiêu đề “9. Tổ chức code với Extension”class ViewController: UIViewController { // Core functionality}
// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return UITableViewCell() }}
// MARK: - UITableViewDelegateextension ViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // Handle selection }}10. Giới hạn
Phần tiêu đề “10. Giới hạn”// ❌ Không thể thêm stored properties// extension String {// var cached: String // Error!// }
// ✅ Chỉ có thể thêm computed propertiesextension String { var reversed: String { String(self.reversed()) }}📝 Tóm tắt
Phần tiêu đề “📝 Tóm tắt”- Extension thêm functionality
- Computed properties, methods, initializers
- Conform protocols qua extension
wherecho constrained extensions- Tổ chức code theo protocols
- Không thể thêm stored properties