Sobes.tech
Junior — Middle

Lehet-e funkciót definiálni protokollalapításban?

sobes.tech MI

Válasz az MI-től

Swiftben a protokoll definícióján belül nem lehet funkciókat implementálni — a protokollok csak a módszerek, tulajdonságok és más tagok követelményeit írják le, amelyeket a protokollnak megfelelő osztályok, struktúrák vagy enumerációk kell, hogy megvalósítsanak.

Vagyis, egy protokollban deklarálhatod egy függvény szignatúráját, de nem a törzsét:

protocol MyProtocol {
    func doSomething()
}

A doSomething() függvény implementációját a protokollt örökölő típusnak kell biztosítania.

Azonban, a protokoll kiterjesztések (protocol extensions) megjelenésével, hozzá lehet adni alapértelmezett módszer-implementációkat, amelyek minden, a protokollnak megfelelő típus számára elérhetőek lesznek:

extension MyProtocol {
    func doSomething() {
        print("Alapértelmezett implementáció")
    }
}

Így, közvetlenül a protokollon belül nem lehet függvényt definiálni, de hozzá lehet adni egy implementációt a protokoll kiterjesztésében.