Swift Academy · Lektion

Transformation og kombination af streams

Brug flatMap, merge, combineLatest og zip.

Lektion 1 af 413 trin

Transformation og kombination af streams er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.

Arbejde med datastrømme

I Combine udsender en publisher en strøm af værdier over tid. Den virkelige styrke kommer fra operatorer, der omdanner og kombinerer disse strømme til nye strømme.

Denne lektion gennemgår de vigtigste operatorer til omdannelse og kombination: flatMap, merge, combineLatest og zip.

map vs flatMap

map omdanner hver værdi til en anden værdi. flatMap går et skridt videre – den omdanner hver værdi til en ny publisher og flader resultaterne ud til én samlet strøm.

Brug flatMap, når hvert input skal udløse en anden asynkron handling.

flatMap i praksis

Her omdannes en strøm af bruger-id'er til en strøm af netværksanmodninger, som flades ud til én strøm af brugere.

userIdPublisher
    .flatMap { id in
        apiClient.fetchUser(id: id)
    }
    .sink { user in
        print("Loaded", user.name)
    }
    .store(in: &cancellables)

Styring af samtidighed i flatMap

Som standard abonnerer flatMap på alle indre publishers på én gang. Du kan begrænse samtidigheden med maxPublishers for at undgå at overbelaste en server.

idsPublisher
    .flatMap(maxPublishers: .max(2)) { id in
        apiClient.fetchUser(id: id)
    }
    .sink { print($0) }
    .store(in: &cancellables)

merge

merge fletter værdier fra flere publishers af samme type til én strøm og udsender hver værdi, så snart den ankommer.

let combined = buttonTapA
    .merge(with: buttonTapB)

combined
    .sink { print("A tap from either button") }
    .store(in: &cancellables)

combineLatest

combineLatest udsender en værdi, hver gang en vilkårlig input-publisher udsender en værdi, og kombinerer den med den nyeste værdi fra hver af de andre. Den er perfekt til validering af formularer, hvor flere felter skal tages i betragtning.

usernamePublisher
    .combineLatest(passwordPublisher)
    .map { name, pass in
        !name.isEmpty && pass.count >= 8
    }
    .sink { isValid in
        print("Form valid:", isValid)
    }
    .store(in: &cancellables)

Sådan fungerer combineLatest

Bemærk: combineLatest udsender ikke noget, før alle input har produceret mindst én værdi. Derefter udløser hver ny udsendelse fra et input det kombinerede output med de andres seneste værdier.

zip

zip parrer værdier efter indeks: den første fra A med den første fra B, den anden med den anden og så videre. Den venter på, at begge sider har en værdi på hver position.

let names = ["Ann", "Bob", "Cy"].publisher
let ages = [30, 25, 41].publisher

names
    .zip(ages)
    .sink { name, age in
        print(name, "is", age)
    }
    .store(in: &cancellables)

combineLatest vs zip

De to er nemme at forveksle:

  • combineLatest – udløses ved enhver udsendelse og bruger den nyeste værdi fra hver
  • zip – udløses kun for par, der matcher efter indeks

Brug combineLatest til tilstand, der opdateres løbende, og brug zip til at justere parallelle resultater én til én.

Kombination til parallelt arbejde

zip er ideel, når uafhængige anmodninger køres parallelt, og du venter på dem alle.

fetchProfile
    .zip(fetchSettings)
    .sink { profile, settings in
        print("Both loaded")
    }
    .store(in: &cancellables)

Kædning af operatorer

Virkelige forløb kæder flere operatorer sammen for deklarativt at udtrykke komplekse asynkrone flows.

searchTextPublisher
    .removeDuplicates()
    .flatMap { query in
        apiClient.search(query)
    }
    .map { results in
        results.prefix(10)
    }
    .sink { print($0) }
    .store(in: &cancellables)

Hurtigt tjek

Test din viden om operatorer.

Opsummering

Du har lært at omdanne og kombinere datastrømme:

  • flatMap – værdi til publisher, fladet ud
  • merge – fletter strømme af samme type
  • combineLatest – den nyeste værdi fra hver, udløses ved enhver udsendelse
  • zip – par, der matcher efter indeks

Disse operatorer lader dig sammensætte kompleks asynkron logik deklarativt.

Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Transformation og kombination af streams” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Transformation og kombination af streams”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Transformation og kombination af streams”?

Brug flatMap, merge, combineLatest og zip. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Transformation og kombination af streams”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Transformation og kombination af streams
  2. Schedulers og threading
  3. Operatorer til fejlhåndtering
  4. Brugerdefinerede publishers og subscribers
← Tilbage til Swift Academy