0Pricing
Swift Academy · Lektion

Protokoll-Extensions vs. Typ-Extensions

Vergleichen Sie Protokoll-Extensions (fügen einem Protokoll Standardimplementierungen hinzu, auch bedingt) mit Typ-Extensions (fügen einer konkreten Typdefinition APIs hinzu). Verstehen Sie Dispatch-Verhalten und Einschränkungen.

Protokoll-Extensions vs. Typ-Extensions ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Überblick

Ziel: Erkennen Sie, wann Sie eine Protokollerweiterung (Standardverhalten für alle konformen Typen) und wann eine Typerweiterung (APIs für einen konkreten Typ) verwenden. Außerdem werden die Dispatch-Regeln behandelt.

Protokoll und Konformität

Protokolle deklarieren Anforderungen. Typen werden konform, indem sie diese Anforderungen implementieren.

protocol Greeter {
    func greet() -> String
}
struct Person: Greeter {
    var name: String
    func greet() -> String { "Hi, I'm \\(name)" }  // concrete requirement impl
}
print(Person(name: "Ada").greet())

Standardimplementierungen über Protokollerweiterungen

Eine Protokollerweiterung kann Standardimplementierungen bereitstellen, die von allen konformen Typen verwendet werden, sofern diese keine eigenen Implementierungen bereitstellen.

protocol Describable {
    func describe() -> String
}
extension Describable {
    // default for ALL conformers until they override
    func describe() -> String { "No description" }
}

struct Car: Describable { }             // uses default
struct Book: Describable {
    func describe() -> String { "A book" } // custom override
}
print(Car().describe(), Book().describe())

APIs in Typerweiterungen

Typerweiterungen fügen Methoden und berechnete Eigenschaften zu einem einzelnen konkreten Typ hinzu. Sie fügen keine gespeicherten Eigenschaften hinzu.

struct Point { var x: Int; var y: Int }

extension Point {
    // add helper just to Point
    var lengthSquared: Int { x*x + y*y }
    func moved(dx: Int, dy: Int) -> Point { Point(x: x+dx, y: y+dy) }
}
let p = Point(x: 2, y: 3)
print(p.lengthSquared, p.moved(dx: 1, dy: -1))

Bedingte Erweiterungen

Fügen Sie Verhalten zu einigen konformen Typen hinzu, indem Sie eine where-Klausel in der Protokollerweiterung verwenden.

protocol Summable { }
extension Int: Summable { }
extension Array where Element: Summable {
    // only for arrays whose elements conform to Summable
    func joinedCount() -> Int { self.count }
}
print([1,2,3].joinedCount())   // works (Int conforms)
 // print(["a","b"].joinedCount()) // not available

Dispatch-Verhalten (Überblick)

Faustregel: Wenn eine Methode eine Protokollanforderung ist und ein konformer Typ sie implementiert, hat diese Implementierung Vorrang (ähnlich wie beim dynamischen Dispatch). Methoden, die nur in einer Protokollerweiterung hinzugefügt wurden und keine Anforderungen sind, werden statisch aufgelöst.

protocol Speaker { func speak() -> String }
extension Speaker { func speak() -> String { "default" } }

struct Cat: Speaker { }
struct Dog: Speaker {
    func speak() -> String { "woof" } // requirement impl overrides default
}

let s1: Speaker = Cat()
let s2: Speaker = Dog()
print(s1.speak()) // "default" (uses default impl)
print(s2.speak()) // "woof" (Dog provides requirement impl)

let c = Cat()
print(c.speak())  // "default" via extension on protocol

Protokoll- vs. Typerweiterung

Kurzer Test: Was ist der entscheidende Unterschied?

Zusammenfassung

Zusammenfassung: Verwenden Sie Protokollerweiterungen für wiederverwendbare Standardimplementierungen, optional mit Bedingungen. Verwenden Sie Typerweiterungen, um einen einzelnen Typ zu erweitern. Denken Sie an den Dispatch: Implementierungen von Anforderungen haben Vorrang vor Methoden aus Standarderweiterungen.

Häufig gestellte Fragen

Ist die Lektion „Protokoll-Extensions vs. Typ-Extensions“ kostenlos?

Ja — der vollständige Text von „Protokoll-Extensions vs. Typ-Extensions“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Protokoll-Extensions vs. Typ-Extensions“?

Vergleichen Sie Protokoll-Extensions (fügen einem Protokoll Standardimplementierungen hinzu, auch bedingt) mit Typ-Extensions (fügen einer konkreten Typdefinition APIs hinzu). Verstehen Sie Dispatch-… Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.

Wie lange dauert die Lektion „Protokoll-Extensions vs. Typ-Extensions“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von Protokollen und Extensions
  2. Protokoll-Extensions vs. Typ-Extensions
  3. Anforderungen auf Typ- und Instanzebene
← Zurück zu Swift Academy