Swift Academy · Pelajaran

Suntikan Pembina

Hantar kebergantungan melalui pemula.

Pelajaran 2 daripada 413 langkah

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 default

Suntikan 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.

Percuma untuk bermula

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

  1. Mengapa Suntikan Kebergantungan
  2. Suntikan Pembina
  3. Abstraksi Berasaskan Protokol
  4. Meniru Kebergantungan dalam Ujian
← Kembali ke Swift Academy