Protokollat sopimuksina
Määritä toiminnan sopimuksia tyypeistä riippumatta.
Protokollat sopimuksina on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on protokolla?
Protokolla määrittää mallin menetelmistä, ominaisuuksista ja muista vaatimuksista, jotka sitä noudattavan tyypin on toteutettava. Se on sopimus: protokollan käyttöön ottava tyyppi lupaa tarjota kaiken protokollassa määritellyn.
protocol Greetable {
var name: String { get }
func greet() -> String
}Protokollan noudattaminen
Tyyppi noudattaa protokollaa ottamalla sen käyttöön ja tarjoamalla jokaisen vaatimuksen toteutuksen. Tässä struct toteuttaa sekä name-ominaisuuden että greet()-menetelmän.
protocol Greetable {
var name: String { get }
func greet() -> String
}
struct Person: Greetable {
let name: String
func greet() -> String { "Hello, I am " + name }
}
let p = Person(name: "Ada")
print(p.greet())Ominaisuusvaatimukset
Protokollat määrittävät, täytyykö ominaisuuden olla luettavissa ({ get }) vai sekä luettavissa että asetettavissa ({ get set }). Tallennettu tai laskettu ominaisuus voi täyttää vain lukemista vaativan vaatimuksen.
protocol Identifiable {
var id: String { get }
}
struct User: Identifiable {
let id: String
}
print(User(id: "u-1").id)Menetelmävaatimukset
Menetelmävaatimuksissa luetellaan nimi, parametrit ja palautustyyppi, mutta ei runkoa. Protokollaa noudattavat tyypit tarjoavat toteutuksen.
protocol Shape {
func area() -> Double
}
struct Square: Shape {
let side: Double
func area() -> Double { side * side }
}
print(Square(side: 3).area())mutating-vaatimukset
Arvotyypeissä menetelmät, jotka muuttavat self-arvoa, on merkittävä mutating-määritteellä. Ilmoittakaa vaatimus mutating-määritteellä, jotta struct-tyypit voivat täyttää sen.
protocol Toggleable {
mutating func toggle()
}
struct Switch: Toggleable {
var isOn = false
mutating func toggle() { isOn.toggle() }
}
var s = Switch()
s.toggle()
print(s.isOn)Protokollat tyyppeinä
Protokolla on täysiverinen tyyppi. Voitte käyttää sitä muuttujien, parametrien ja palautusarvojen tyyppinä, jolloin mikä tahansa protokollaa noudattava arvo hyväksytään.
protocol Animal { func sound() -> String }
struct Dog: Animal { func sound() -> String { "Woof" } }
struct Cat: Animal { func sound() -> String { "Meow" } }
let animals: [Animal] = [Dog(), Cat()]
for a in animals { print(a.sound()) }Polymorfismi protokollien avulla
Protokollan menetelmää kutsuttaessa kutsu välitetään arvon taustalla olevalle konkreettiselle tyypille. Näin voitte kirjoittaa koodia, joka toimii monien tyyppien kanssa yhden sopimuksen kautta.
protocol Describable { func describe() -> String }
struct Book: Describable { let t: String; func describe() -> String { "Book: " + t } }
struct Film: Describable { let t: String; func describe() -> String { "Film: " + t } }
func show(_ d: Describable) { print(d.describe()) }
show(Book(t: "Swift"))
show(Film(t: "Inception"))Alustajavaatimukset
Protokollat voivat vaatia alustajia. Luokkien on merkittävä toteutus required-määritteellä, jotta aliluokat tarjoavat sen myös.
protocol FromInt {
init(value: Int)
}
struct Wrapper: FromInt {
let value: Int
init(value: Int) { self.value = value }
}
print(Wrapper(value: 42).value)Protokollaperintä
Protokolla voi periä yhden tai useamman muun protokollan ja lisätä perittyjen vaatimusten lisäksi omia vaatimuksia.
protocol Named { var name: String { get } }
protocol Aged: Named { var age: Int { get } }
struct Member: Aged {
let name: String
let age: Int
}
let m = Member(name: "Lin", age: 30)
print(m.name, m.age)Vain luokille tarkoitetut protokollat
Merkitkää protokolla AnyObject-määritteellä, jos haluatte rajoittaa sen noudattamisen luokkiin. Tämä on hyödyllistä viitesemantiikkaa vaativissa tapauksissa, kuten delegoinnissa.
protocol Counter: AnyObject {
var count: Int { get set }
}
class Box: Counter {
var count = 0
}
let b = Box()
b.count = 5
print(b.count)Noudattamisen tarkistaminen
Käyttäkää is- ja as?-operaattoreita tarkistamaan suorituksen aikana, noudattaako arvo protokollaa.
protocol Flyer { func fly() }
struct Bird: Flyer { func fly() { print("flap") } }
struct Rock {}
let things: [Any] = [Bird(), Rock()]
for t in things {
if let f = t as? Flyer { f.fly() } else { print("grounded") }
}Pikatarkistus
Testatkaa ymmärrystänne protokollavaatimuksista.
Kertaus
Opitte, että protokolla on sopimus: se ilmoittaa ominaisuus-, menetelmä-, mutating- ja alustajavaatimukset ilman toteutuksia. Tyypit noudattavat protokollaa täyttämällä kaikki sen vaatimukset. Protokollia voidaan käyttää tyyppeinä polymorfismiin, ne voivat periä muita protokollia, ja niiden noudattamisen voi rajoittaa luokkiin AnyObject-määritteellä.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”Protokollat sopimuksina” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Protokollat sopimuksina”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Protokollat sopimuksina”?
Määritä toiminnan sopimuksia tyypeistä riippumatta. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Protokollat sopimuksina”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Protokollat sopimuksina
- Oletustoteutukset laajennuksissa
- Protokollien koostaminen
- Ehdollinen protokollanmukaisuus