Swift: Extension
Opublikowano: 21.11.2023 - tagi: Swift Struktura Klasa Protokół Typ Rozszerzenie
Rozszerzenia
Rozszerzenia w Swift służą do dodania funkcjonalności do już istniejącego typu. Może to być typ zarówno wbudowany w język, jak i stworzony przez programistę.
Rozszerzenie można dodać do klasy, struktury, protokołu, enumeracji i innych typów w Swift.
Żeby dodać nowe rozszerzenie, należy użyć słowa kluczowego extension.
Za pomocą rozszerzenie możesz dodać nową funkcjonalność, ale nie możesz nadpisać już istniejącej.
Przykłady
Typ własny
class Calculator {
func add(a: Int, b: Int) -> Int {
return a + b
}
}
extension Calculator {
func subtract(a: Int, b: Int) -> Int {
return a - b
}
}
var calculator = Calculator()
print(calculator.add(a: 7, b: 3)) // 10
print(calculator.subtract(a: 7, b: 3)) // 4
Typ wbudowany
Możesz też dodać rozszerzenie do typu wbudowanego:
extension Int {
func square() -> Int {
return self * self
}
}
var a: Int = 7
print("a * a = \(a.square())") // 49
print("a = \(a)") // 7
Jeśli chcesz zmienić stan użyj słowa kluczowego mutating i nową wartość przypisz do self:
extension Int {
mutating func square() {
self = self * self
}
}
var a: Int = 7
a.square()
print("a = \(a)") // 49
a.square()
print("a = \(a)") // 2401
Computed property
Za pomocą rozszerzenia nie możesz dodać stored property:
extension SomeType {
var property1: Int // Błąd!
}
ale możesz dodać computed property:
struct User {
var firstName: String = ""
var lastName: String = ""
}
extension User {
var fullName: String {
return firstName + " " + lastName
}
}
var user = User(firstName: "James", lastName: "Bond");
print(user.fullName) // James Bond