0Pricing
Swift Academy · Ders

Actor'ler, veri yalıtımı ve nonisolated

Actor yalıtımını öğrenin: durum bir actor arkasında korunur, actor'ler arası erişim await gerektirir ve nonisolated üyeler saf veya statik olduklarında yalıtımı devre dışı bırakır.

Actor'ler, veri yalıtımı ve nonisolated, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 3 dersten oluşur.

Aktörler ne sağlar?

Bir aktör, değiştirilebilir durumunu korur. Yalıtılmış duruma aynı anda yalnızca bir görev erişebilir; dışarıdan çağıranlar aktörün await yöntemlerini kullanmalıdır.

  • Yalıtım = veri yarışı yok
  • Aktörler arası çağrılar eşzamansızdır
  • Saf/statik üyeler için nonisolated

Aktör temelleri

Aktörün içinde erişim doğrudandır. Dışarıdan, yalıtılmış durumun hem okumaları hem de yazmaları için await kullanmanız gerekir.

actor Counter {
    private var value: Int = 0   // isolated state

    func increment() { value += 1 }      // isolated method (async to outsiders)
    func get() -> Int { value }          // read isolated state
}

let c = Counter()
Task {
    await c.increment()
    print(await c.get())  // 1
}

Serileştirme güvencesi

Birden çok görev eşzamanlı olarak çağırsa bile aktör erişimi serileştirir ve böylece yarışları önler.

actor BankAccount {
    private var balance: Int = 0
    func deposit(_ amount: Int) { balance += amount }
    func withdraw(_ amount: Int) -> Bool {
        if balance >= amount { balance -= amount; return true }
        return false
    }
    func current() -> Int { balance }
}

let acc = BankAccount()
Task {
    async let a = acc.deposit(50)
    async let b = acc.withdraw(20)
    _ = await (a, b)                 // operations are serialized inside the actor
    print(await acc.current())       // deterministic balance
}

nonisolated API'ler

Çağıranların await kullanmasına gerek kalmaması için saf veya statik üyeleri nonisolated olarak işaretleyin. Bu üyeler yalıtılmış duruma erişmemelidir.

actor Clock {
    private var ticks: Int = 0
    func tick() { ticks += 1 }
    func read() -> Int { ticks }

    // Nonisolated: safe without awaiting (pure computation / constant)
    nonisolated static let format = "HH:mm:ss"

    nonisolated func describeFormat() -> String {
        // Cannot touch isolated state here; this is pure
        return "Format: " + Self.format
    }
}

let cl = Clock()
Task {
    await cl.tick()
    print(await cl.read())           // 1
    // Nonisolated members don't require await:
    print(Clock.format)              // "HH:mm:ss"
    print(cl.describeFormat())       // sync call
}

Yeniden giriş farkındalığı

Aktörler yeniden girişli olabilir: bir aktör yönteminin içindeki await sonrasında başka iletiler çalışabilir. Değişmezleri await noktaları boyunca geçerli tutun.

actor Logger {
    private var lines: [String] = []
    func log(_ s: String) async {
        lines.append(s)
        // Simulate an await point; actor may process other messages here (reentrant)
        try? await Task.sleep(nanoseconds: 10_000_000)
        lines.append("done")
    }
    func snapshot() -> [String] { lines }
}

let logger = Logger()
Task {
    async let a = logger.log("A")
    async let b = logger.log("B")
    _ = await (a, b)
    print(await logger.snapshot())   // order shows possible interleaving
}

En iyi uygulamalar

Yönergeler:

  • Küçük eşzamansız yöntemler sunun; uzun kritik bölümlerden kaçının.
  • Sabitler ve saf yardımcılar için nonisolated kullanın.
  • Aktörlerin dışında Sendable olmayan paylaşılan değiştirilebilir durum saklamayın (sırada Sendable konusunu öğreneceksiniz).

Aktör yalıtımı gereksinimi

Hızlı kontrol: Bir aktörün durumunu dışarıdan nasıl okur veya yazarsınız?

Özet

Özet: Aktörler değiştirilebilir durumu yalıtır; dışarıdan erişim için await gerekir. Saf/statik üyeler için nonisolated kullanın ve yeniden girişi güvenli tutmak için kısa eşzamansız yöntemler tasarlayın.

Sıkça Sorulan Sorular

“Actor'ler, veri yalıtımı ve nonisolated” dersi ücretsiz mi?

Evet — “Actor'ler, veri yalıtımı ve nonisolated” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 3 dersten oluşur.

“Actor'ler, veri yalıtımı ve nonisolated” dersinde ne öğreneceğim?

Actor yalıtımını öğrenin: durum bir actor arkasında korunur, actor'ler arası erişim await gerektirir ve nonisolated üyeler saf veya statik olduklarında yalıtımı devre dışı bırakır. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.

“Actor'ler, veri yalıtımı ve nonisolated” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Paralellik için TaskGroup
  2. Actor'ler, veri yalıtımı ve nonisolated
  3. Sendable ve iş parçacığı güvenliği denetimi
← Swift Academy Sayfasına Dön