Како створити мостове између оквира у иОС апликацији

Ако код ваше апликације изгледа овако ...

„Желим да извозим тај део своје апликације, али је везан за остатак апликације, као што је тањир за шпагете!“

Покушај извоза малог дела апликације који је превише зависан

Када сам почео да модуларишем део апликације на којој сам радио, налетео сам на зид.

Желео сам да извозим услугу (у ствари је то била услуга праћења) у посебан оквир. Проблем је био што је овај сервис превише тешко везан за апликацију. Користила је другу услугу која је и сама користила другу дубоко усидрену у апликацији.

Да бих извео услугу праћења, морао бих поново направити фактор и преуредити читав низ услуга у нови оквир!

Али чињеница је да нисам имао времена за то и регресијско тестирање било би ноћна мора, и из многих других разлога које бисте могли имати у било којој компанији (процес, буџет, рок).
Зато сам морао сазнати како да извозим овај део своје апликације, а да не прерађујем све.

Кренимо од конкретног примјера!

Ево нас, најбољи начин да научимо и схватимо како ствари функционишу је да се вежба! (Навешћујем Гитхуб репо за овај пример на крају овог поста)
Дозволите ми да поставим контекст, имамо малу апликацију са само 2 екрана:

  • Почетни екран
  • Екран за плаћање (желимо да га извозимо у оквир)

Страница за плаћање садржи ТектФиелд за унос броја картице и дугме Паи. Када притиснете дугме, плаћање би требало покренути.
Али ! Изазов лежи у начину плаћања. Претпоставимо да једноставно не можемо да извозимо услугу плаћања из неких разлога које сам евоцирао мало раније.

Почетни екран и екран за плаћање

Дакле, имамо ова два екрана, декларисана у две различите мете. Почетни екран је деклариран у главном циљу апликације, а екран за плаћање деклариран у другом модулу под називом ПаиментМодуле. Имамо и ПаиментСервице пријављену у главном циљу апликације, као што следи:

Начин плаћања је начин који не можемо да издвојимо из апликације јер је превише зависан. Али желимо да је користимо из платног модула.

Имамо ПаиментВиевЦонтроллер дефинисан у модулу Паимент, ако покушамо да назовемо ПаиментСервице, имаћемо грешку јер ова услуга није у модулу. Не можете да увезете главни циљ у модулу (то би била глупост)

Па како ћемо користити овај метод од ПаиментВиевЦонтроллер?

Дефинишите протокол у модулу

Ово ће бити наш мост. Морате дефинисати протокол у модулу са методом која описује шта желите да користите у главном циљу апликације.

Дакле, дефинисајмо протокол под називом ПаиментСервицеПротоцол методом плаћања:

Имплементација протокола у апликацији

Сада морамо рећи нашој ПаиментСервице да се придржава овог протокола. Само морамо додати ово:

"Зашто метода декларисана у протоколу није имплементирана у ово проширење?"

У праву сте, када се подударате са протоколом морате имплементирати његова својства и методе. Трик је у томе што је име методе у протоколу потпуно исто као и име методе у ПаиментСервице-у који смо мало раније објавили. На тај ће начин систем знати да ће морати користити методу плаћања декларирану у ЦлассСервице приликом приступа протоколарној методи.

Повезивање два дела

Сада морамо спојити та два дела заједно.
Када ХомеВиевЦонтроллер, када додирнемо дугме „Иди на страницу за плаћање“, инстанцирамо ПаиментВиевЦонтроллер. Тада ћемо га проследити референцом на ЦлассСервице класу, али контролер плаћања у модулу ће га видети као ПаиментСервицеПротоцол тип.

Ево трика:

Просљеђујемо ПаиментСервице.селф, а код у модулу приказује ПаиментСервицеПротоцол.Типе.
Сада од модула можемо користити начин плаћања који је дефинисан у апликацији!

Користећи мост

Сада је врло једноставно користити мост који смо направили:

Метода дидТапПаиБуттон зове се сваки пут када додирнете дугме Паи (звучи тачно, зар не?). Проверите у линији 23: зовемо начин плаћања на референцу протокола коју смо добили из апликације.

Пошто је ПаиментСервице у складу са овим протоколом, систем ће извршити код унутар методе паи, која је дефинисана у ПаиментСервице.свифт.

Другим речима, користимо методу коју на почетку нисмо могли да позовемо из модула! Мост је сада постављен.

Ево како изгледа када додирнете дугме за плаћање.

Кориштење начина плаћања који се налази у главном циљу, од платног модула

Закључак

Закључно, ова метода премошћивања може се користити ако желите да извозите компоненту своје апликације у неки оквир.

Ова техника ће вам омогућити да исечете резанци из посуде, ако сте приморани да извозите тај део своје апликације у оквир, али не можете да извезите целокупну ствар из било којег разлога.

Мислим да је ово привремено решење пре него што извучете читаву компоненту унутар оквира, када ћете, на пример, имати времена. (У овом сценарију, једног дана ћете морати да извозите начин плаћања унутар модула за плаћање)

Признајем да у идеалном свету, са једнорогама и маштовитим стварима, не бисмо урадили тако нешто. Радије бисмо извели целу компоненту, али као што сам већ рекао више пута то није увек могуће.

Овде можете пронаћи Гитхуб репо овог пројекта, не оклевајте да проверите како је мост направљен и да га сами испробате.
Надам се да овај пост може помоћи, слободно поставите било које питање које имате на уму!

Ова прича објављена је у највећој подузетничкој публикацији Тхе Стартуп, коју прати +442,678 људи.

Претплатите се да бисте добили наше врхунске приче овде.