some P (tipe hasil opak): menyembunyikan tipe konkret
Kembalikan some P untuk menyembunyikan tipe hasil konkret sambil menjamin bahwa tipe tersebut memenuhi P ; pemanggil memperoleh kinerja tipe statis tanpa mengekspos implementasi.
some P (tipe hasil opak): menyembunyikan tipe konkret adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 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 tipe hasil opak?
Tipe hasil opak menggunakan some P untuk menyembunyikan tipe konkret di balik protokol. Tipe konkret tersebut tetap untuk fungsi itu, tetapi pemanggil hanya melihat antarmuka protokolnya.
- Enkapsulasi tanpa kehilangan kinerja statis
- Sangat cocok untuk pabrik dan API mirip DSL
Pabrik opak dasar
makeUnitCircle() mengembalikan some Shape. Pemanggil dapat memanggil area(), tetapi tidak dapat bergantung pada tipe konkretnya.
protocol Shape {
func area() -> Double
}
struct Circle: Shape {
let r: Double
func area() -> Double { .pi * r * r }
}
struct Square: Shape {
let s: Double
func area() -> Double { s * s }
}
// Opaque factory: callers know it's a Shape, not which one
func makeUnitCircle() -> some Shape {
Circle(r: 1.0) // concrete type is hidden
}
let sh = makeUnitCircle()
print(String(format: "%.2f", sh.area())) // 3.14Tetap untuk setiap fungsi
Tipe tersembunyi tersebut tetap untuk setiap fungsi. Fungsi lain yang mengembalikan some Shape dapat menyembunyikan tipe konkret yang berbeda.
// Each function using "some Shape" chooses one hidden concrete type.
// Within the same function, it must always be the same concrete type.
func makeSquare(side: Double) -> some Shape {
Square(s: side) // fixed to Square for this function
}
let a = makeUnitCircle()
let b = makeUnitCircle()
print(a.area() == b.area()) // true for two unit circles
let q = makeSquare(side: 2)
print(q.area()) // 4.0Hanya satu tipe tersembunyi
Aturan: fungsi dengan nilai kembalian opak harus mengembalikan tipe konkret yang sama pada semua jalur. Cabang berbeda → kesalahan kompilasi.
// ❌ This would NOT compile, because different branches return different concrete types:
// func makeShape(flag: Bool) -> some Shape {
// if flag {
// return Circle(r: 1)
// } else {
// return Square(s: 1) // error: underlying type must be the same
// }
// }
// Rule: an opaque-returning function must always produce the same concrete type.Opak dengan generik
Nilai kembalian opak dapat disusun bersama generik. Pemanggil melihat sebuah Shape, sementara Anda menjaga implementasi Scaled<Circle> tetap privat.
// A generic decorator that also conforms to Shape
struct Scaled<S: Shape>: Shape {
let base: S
let k: Double
func area() -> Double { base.area() * k * k }
}
// Factory still hides the concrete generic type
func makeScaledUnitCircle(k: Double) -> some Shape {
Scaled(base: Circle(r: 1.0), k: k)
}
let s1 = makeScaledUnitCircle(k: 2)
print(s1.area()) // 4 * πKapan memilih tipe opak
Gunakan tipe opak ketika:
- Anda ingin menyembunyikan implementasi tetapi tetap mempertahankan pengetikan statis.
- API harus mengembalikan tampilan protokol (misalnya,
Shape) tanpa mengekspos tipe konkret. - Anda membuat alur pemrosesan/DSL yang merangkai pembangun sambil tetap generik.
(Anda akan membandingkannya dengan tipe eksistensial pada pelajaran berikutnya.)
Definisi hasil opak
Pemeriksaan singkat: Apa yang dijamin oleh some P?
Ringkasan
Ringkasan: Tipe hasil opak (some P) menyembunyikan tipe konkret, tetapi tetap mempertahankan dispatch statis. Tipe dasarnya tetap untuk setiap fungsi; gunakan tipe ini untuk API yang bersih, cepat, dan terenkapsulasi.
Belajar Swift dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Pertanyaan yang Sering Diajukan
Apakah pelajaran “some P (tipe hasil opak): menyembunyikan tipe konkret” gratis?
Ya — teks lengkap “some P (tipe hasil opak): menyembunyikan tipe konkret” 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 “some P (tipe hasil opak): menyembunyikan tipe konkret”?
Kembalikan some P untuk menyembunyikan tipe hasil konkret sambil menjamin bahwa tipe tersebut memenuhi P ; pemanggil memperoleh kinerja tipe statis tanpa mengekspos implementasi. 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 1 dari 3.
Berapa lama pelajaran “some P (tipe hasil opak): menyembunyikan tipe konkret” 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
- some P (tipe hasil opak): menyembunyikan tipe konkret
- any P (eksistensial): kompromi dan pengiriman dinamis
- Memilih antara some, any, dan generik