0Pricing
Swift Academy · Pelajaran

Pola penghapusan tipe (AnySequence/AnyIterator)

Gunakan AnySequence dan AnyIterator untuk menghapus tipe sequence/iterator konkret sehingga API dapat mengembalikan “sequence berisi T” tanpa mengekspos implementasinya.

Pola penghapusan tipe (AnySequence/AnyIterator) adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 3 pelajaran total.

Mengapa penghapusan tipe?

Penghapusan tipe menyembunyikan tipe konkret di balik pembungkus yang stabil. Dengan AnySequence atau AnyIterator, Anda dapat mengembalikan “urutan elemen” tanpa mengekspos struktur internal.

Keterbatasannya

Sequence memiliki tipe terkait (Element), sehingga protokol tanpa tipe konkret tidak dapat digunakan sebagai tipe nilai konkret. Kita memerlukan pembungkus.

// Goal: return "some Sequence<Int>"
// This won't compile as a stored value type:
// let s: Sequence = [1,2,3]   // Protocol with associated types
// Instead, erase the type to AnySequence<Int>.

Pembungkus AnySequence

AnySequence membungkus urutan konkret apa pun (Array, Set, atau tipe khusus) dan mengekspos tipe seragam seperti AnySequence<Int>.

// Build an AnySequence<Int> from an Array
let a = [1, 2, 3]
let seq1: AnySequence<Int> = AnySequence(a)
// Consume like any sequence
for x in seq1 { print(x, terminator: " ") }
print("")

Pembungkus AnyIterator

AnyIterator membungkus closure yang menghasilkan elemen. Bungkus closure tersebut dengan AnySequence untuk mengekspos urutan lengkap.

// Create an AnyIterator<Int> by hand
var i = 0
let it = AnyIterator<Int> {
    // Return next number or nil to stop
    guard i < 3 else { return nil }
    defer { i += 1 }
    return i
}
let seq2 = AnySequence(it)
for x in seq2 { print(x, terminator: " ") }  // 0 1 2
print("")

Tipe hasil yang seragam

Penghapusan tipe memungkinkan satu fungsi mengembalikan implementasi yang berbeda melalui satu tipe hasil stabil (AnySequence<Int>).

// Return a sequence of Int without exposing concrete type
func numbers(flag: Bool) -> AnySequence<Int> {
    if flag {
        // Array-based
        return AnySequence([10, 20, 30])
    } else {
        // Lazy generated with AnyIterator
        var n = 1
        let it = AnyIterator<Int> {
            guard n <= 3 else { return nil }
            defer { n += 1 }
            return n * 100
        }
        return AnySequence(it)
    }
}

for x in numbers(flag: true)  { print(x, terminator: " ") }  // 10 20 30
print("")
for x in numbers(flag: false) { print(x, terminator: " ") }  // 100 200 300
print("")

Kapan menggunakannya

Gunakan penghapusan tipe jika:

  • Anda ingin menyembunyikan detail implementasi urutan/pengiterasi.
  • API harus mengembalikan tipe yang sama terlepas dari cabang internalnya.
  • Tipe generik terlalu terekspos pada batas API.

Catatan: utamakan tipe generik demi kinerja dan kejelasan di dalam modul; gunakan AnySequence/AnyIterator pada batas API jika diperlukan.

Tujuan AnySequence

Pemeriksaan singkat: Apa manfaat AnySequence<T> bagi Anda?

Ringkasan

Ringkasan: Bungkus urutan/pengiterasi konkret dengan AnySequence / AnyIterator untuk menghapus tipe dan mengembalikan “urutan T” dari API yang fleksibel.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola penghapusan tipe (AnySequence/AnyIterator)” gratis?

Ya — teks lengkap “Pola penghapusan tipe (AnySequence/AnyIterator)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Pola penghapusan tipe (AnySequence/AnyIterator)”?

Gunakan AnySequence dan AnyIterator untuk menghapus tipe sequence/iterator konkret sehingga API dapat mengembalikan “sequence berisi T” tanpa mengekspos implementasinya. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.

Berapa lama pelajaran “Pola penghapusan tipe (AnySequence/AnyIterator)” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. associatedtype & protokol generik
  2. Pola penghapusan tipe (AnySequence/AnyIterator)
  3. Kapan menggunakan eksistensial (any P) vs generik
← Kembali ke Swift Academy