Suntikan Pembina
Hantar kebergantungan melalui pemula.
Suntikan Pembina ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Suntikan melalui Pembina
Gaya DI yang paling biasa menghantar kebergantungan melalui pemula. Objek menerima semua yang diperlukannya semasa dicipta lalu menyimpannya.
init Asas
Isytiharkan sifat tersimpan dan tetapkannya dalam init. Pemanggil mesti membekalkan kebergantungan untuk mencipta objek tersebut.
struct Greeter { func hi() -> String { "Hi" } }
struct View {
let greeter: Greeter
init(greeter: Greeter) { self.greeter = greeter }
func show() { print(greeter.hi()) }
}
View(greeter: Greeter()).show()Kebergantungan Tidak Boleh Diubah
Menggunakan let untuk sifat yang disuntik menjadikannya tidak boleh diubah, jadi kebergantungan tidak boleh ditukar selepas pembinaan.
struct Engine { let hp: Int }
struct Car {
let engine: Engine // cannot change later
init(engine: Engine) { self.engine = engine }
}
let c = Car(engine: Engine(hp: 150))
print(c.engine.hp)Berbilang Kebergantungan
Senaraikan beberapa parameter untuk menyuntik lebih daripada satu komponen sokongan. Pemula itu mendokumenkan keseluruhan set keperluan.
struct DB { func get() -> Int { 7 } }
struct Cache { func put(_ v: Int) { print("cached \(v)") } }
struct Service {
let db: DB
let cache: Cache
init(db: DB, cache: Cache) { self.db = db; self.cache = cache }
func run() { cache.put(db.get()) }
}
Service(db: DB(), cache: Cache()).run()Nilai Parameter Lalai
Nilai lalai membolehkan pemanggil tidak menyertakan kebergantungan dalam persekitaran sebenar, sambil masih membenarkan penggantian dalam ujian.
struct Logger { func log(_ m: String) { print(m) } }
struct Service {
let logger: Logger
init(logger: Logger = Logger()) { self.logger = logger }
func run() { logger.log("go") }
}
Service().run() // uses defaultSuntikan melalui Pembina Kelas
Kelas mengikut corak yang sama. Pemula menetapkan setiap kebergantungan sebelum tika itu boleh digunakan.
class Mailer { func send() { print("sent") } }
class Signup {
let mailer: Mailer
init(mailer: Mailer) { self.mailer = mailer }
func go() { mailer.send() }
}
Signup(mailer: Mailer()).go()Menyuntik Nilai
Kebergantungan tidak semestinya objek. Anda boleh menyuntik nilai konfigurasi seperti URL asas atau bendera dengan cara yang sama.
struct Client {
let baseURL: String
init(baseURL: String) { self.baseURL = baseURL }
func endpoint(_ p: String) -> String { baseURL + p }
}
print(Client(baseURL: "https://api").endpoint("/users"))Akar Penggabungan
Satu tempat berdekatan titik masuk aplikasi menyambungkan keseluruhan graf objek. Semua bahagian lain hanya menerima kebergantungan yang telah disediakan.
struct DB { func count() -> Int { 3 } }
struct Repo { let db: DB; func n() -> Int { db.count() } }
struct App { let repo: Repo; func run() { print(repo.n()) } }
// Composition root:
let app = App(repo: Repo(db: DB()))
app.run()Mengelakkan Global Tersembunyi
Suntikan melalui pembina menggantikan capaian global yang tersembunyi. Setiap kebergantungan dinyatakan dengan jelas, jadi anda boleh menjejaki aliran data.
struct Settings { let theme: String }
struct Screen {
let settings: Settings
func render() { print("Theme: \(settings.theme)") }
}
Screen(settings: Settings(theme: "dark")).render()Diperlukan vs Pilihan
Jika sesuatu kebergantungan benar-benar pilihan, modelkannya dengan jenis pilihan; jika tidak, wajibkannya supaya objek tidak mungkin wujud dalam keadaan separa dikonfigurasikan.
struct Analytics { func track() { print("tracked") } }
struct Flow {
let analytics: Analytics?
func step() { analytics?.track() }
}
Flow(analytics: Analytics()).step()
Flow(analytics: nil).step()Mengapa Suntikan melalui Pembina
Suntikan ini menjamin objek yang dimulakan sepenuhnya, menjadikan kebergantungan kelihatan dan berfungsi dengan ketakbolehubahan let. Inilah pilihan lalai yang disyorkan dalam Swift.
struct Adder { func add(_ a: Int, _ b: Int) -> Int { a + b } }
struct Calc {
let adder: Adder
init(adder: Adder) { self.adder = adder }
}
print(Calc(adder: Adder()).adder.add(4, 5))Semakan Pantas
Mengapakah suntikan melalui pembina sering diutamakan?
Rumusan
Suntikan melalui pembina menghantar kebergantungan melalui init dan menyimpannya, biasanya sebagai sifat let yang tidak boleh diubah. Anda boleh menyuntik objek atau nilai, membekalkan nilai lalai dan menyambungkan semuanya dalam akar penggabungan. Seterusnya anda akan menyuntik protokol, bukannya jenis konkrit.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “Suntikan Pembina” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Suntikan Pembina”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Suntikan Pembina”?
Hantar kebergantungan melalui pemula. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Suntikan Pembina” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengapa Suntikan Kebergantungan
- Suntikan Pembina
- Abstraksi Berasaskan Protokol
- Meniru Kebergantungan dalam Ujian