Qanday qilib iOS ilovasida ramkalar o'rtasida ko'priklarni yaratish mumkin

Agar ilovangizning kodi shunday bo'lsa ...

"Men o'z ilovamning shu qismini eksport qilmoqchiman, lekin u spagetti plastinka singari ilova bilan bog'langan!"

Ilovaning juda bog'liq bo'lgan kichik qismini eksport qilishga harakat qilinmoqda

Men ishlayotgan ilovaning bir qismini modulizatsiya qilishni boshlaganimda, devorga yugurdim.

Men bir xizmatni (aslida u Kuzatish xizmati) alohida doiraga eksport qilmoqchi edim. Muammo shundaki, ushbu xizmat ilova bilan juda qattiq bog'langan edi. Bu dasturda chuqur o'rnashgan boshqa xizmatdan foydalanayotgan edi.

Kuzatuv xizmatini eksport qilish uchun men reflektorni qayta ishlashim kerak edi va barcha xizmatlarni yangi doirada qayta ko'rib chiqaman!

Ammo haqiqat shuki, buni amalga oshirishga vaqtim yo'q edi va regressiya testi dahshatli bo'lar edi va boshqa sabablarga ko'ra siz har qanday kompaniyada (jarayon, byudjet, muddat).
Shuning uchun men hamma narsani qayta tiklamasdan ushbu ilovani qanday qilib eksport qilish kerakligini aniqlashim kerak edi.

Keling, aniq bir misoldan boshlaylik!

Mana biz o'rganish va narsalar qanday ishlashni tushunishning eng yaxshi usuli! (Men ushbu misol uchun Github repo-ni ushbu post oxirida taqdim qilaman)
Shunday qilib, kontekstni belgilashga ijozat bering, bizda atigi 2 ta ekranga ega kichik dastur mavjud:

  • Uy ekrani
  • To'lov ekrani (biz ushbu ekranni ramkaga eksport qilmoqchimiz)

To'lov sahifasida karta raqamini kiritish uchun "TextField" va "To'lov" tugmachalari mavjud. Tugmani bosganingizda, to'lovni boshlash kerak.
Ammo! Muammo to'lov usuliga bog'liq. Aytaylik, to'lov xizmatini men ilgari aytgan ba'zi sabablarga ko'ra eksport qila olmaymiz.

Bosh ekran va To'lov ekrani

Shunday qilib, bizda ikkita turli xil maqsadlarda e'lon qilingan ushbu ikkita ekran mavjud. Uy ekrani asosiy dasturiy maqsadda e'lon qilingan va to'lov ekrani To'lovModule deb nomlangan boshqa modulda e'lon qilingan. Shuningdek, bizda asosiy xizmat maqsadlarida to'lovlar xizmati xizmati e'lon qilingan:

To'lov usuli - bu ilovadan chiqarib bo'lmaydigan usul, chunki u juda bog'liqdir. Ammo biz uni to'lov modulidan foydalanmoqchimiz.

To'lov modulida bizda To'lovViewController aniqlangan, agar to'lov xizmati orqali qo'ng'iroq qilsak, xato yuz beradi, chunki ushbu xizmat modulda yo'q. Modul ichida asosiy maqsadni import qila olmaysiz (bu bema'ni narsa)

To'lovViewController-dan ushbu usuldan qanday foydalanamiz?

Modulda protokolni aniqlang

Bu bizning ko'prigimiz bo'ladi. Modulda siz asosiy ilova maqsadida foydalanmoqchi bo'lganingizni tavsiflaydigan protokolni belgilashingiz kerak.

Shunday qilib, to'lov usuli bilan To'lovServiceProtokol nomli protokolni aniqlaymiz.

Ilovada protokolni bajarish

Endi biz ushbu protokolga muvofiqligini To'lovlar xizmatimizga aytishimiz kerak. Buni shunchaki qo'shishimiz kerak:

"Nima uchun protokolda e'lon qilingan usul ushbu kengaytmada qo'llanilmaydi?"

Siz haqsiz, protokolga murojaat qilishda uning xususiyatlari va usullarini amalga oshirishingiz kerak. Bu erda hiyla-nayrang shundan iboratki, protokoldagi usul nomi bir oz oldin biz e'lon qilgan To'lovlar Xizmatidagi usul nomi bilan bir xil. Shu tarzda, tizim protokol usuliga kirishda to'lovlarni to'lash usulidan foydalanish kerakligini bilib oladi.

Ikki qismni bog'lash

Endi ikkala qismni birlashtirishimiz kerak.
HomeViewController-dan "To'lov sahifasiga o'tish" tugmachasini bosganimizda, To'lovViewController-ni tayyorlaymiz. O'sha paytda biz buni To'lov xizmati xizmati sinfiga havola qilmoqchimiz, ammo moduldagi to'lov nazorati uni To'lov XizmatiProtokol turi sifatida ko'radi.

Bu hiyla-nayrang:

Biz to'lovService.ning o'zidan o'tmoqdamiz va moduldagi kod bir to'lovServiceProtocol.Type-ni ko'rmoqda.
Endi biz moduldan ilovada belgilangan to'lovni amalga oshirish usulidan foydalanishimiz mumkin!

Ko'prikdan foydalanish

Biz yaratgan ko'prikdan foydalanish juda oson:

"To'lash" tugmachasini bosganingizda didTapPayButton usuli chaqiriladi (ovoz to'g'ri, to'g'rimi?). 23-qatorda tekshiring: biz ilovadan olgan protokol ma'lumotnomasida to'lov usulini taklif qilmoqdamiz.

To'lovlar xizmati ushbu protokolga muvofiq bo'lganligi sababli, tizim to'lovni amalga oshirish usulida kodni amalga oshiradi, bu to'lovService.swift-da belgilanadi.

Boshqacha qilib aytganda, biz moduldan dastlab chaqira olmaydigan usuldan foydalanmoqdamiz! Endi ko'prik o'rnatildi.

To'lov tugmachasini bosganingizda mana bu ko'rinadi.

To'lov modulidan asosiy maqsadga ega bo'lgan to'lov usulidan foydalanish

Xulosa

Xulosa qilish uchun, agar siz ilovangiz tarkibiy qismini ramkaga eksport qilmoqchi bo'lsangiz, ushbu ko'prik usulidan foydalanishingiz mumkin.

Ushbu usul sizga nonni piyozdan kesib tashlashga imkon beradi, agar siz ilovangizning bir qismini ramkaga eksport qilishga majbur bo'lsangiz, lekin biron bir sababga ko'ra siz to'liq narsani eksport qila olmasangiz.

O'ylaymanki, bu vaqtinchalik echim, butun tarkibiy qismni olishdan oldin, masalan siz uchun vaqt bo'ladi. (Ushbu stsenariyda bir kun kelib siz To'lov moduli ichida to'lov usulini eksport qilishingiz kerak bo'ladi)

Tan olaman, ideal dunyoda, kichkina va xayoliy narsalar bilan, biz bunday narsani qilmaymiz. Biz tarkibiy qismni eksport qilsak yaxshi bo'lardi, lekin ko'p marta aytganimdek, bu har doim ham mumkin emas.

Ushbu loyihaning Github repo-ni bu erda topishingiz mumkin, ko'prik qanday qurilganini tekshirishdan tortinmang va uni o'zingiz sinab ko'ring.
Ushbu post sizga yordam berishi mumkin deb umid qilaman, siz eslagan har qanday savolni berishdan o'zingizni tiying!

Ushbu hikoya The Startup, Medium yirik tadbirkorlik nashrida chop etilgan, undan keyin +442 678 kishi.

Bizning eng yaxshi voqealarni olish uchun obuna bo'ling.