1. Հետ բերեք AppDelegate-ը և SceneDelegate-ը (iOS 13+)
  2. scenePhase, .onChange և .onOpenUrl (iOS 14+)
  3. NotificationCenter (iOS 4+) և Combine(iOS 13+)

Հղում



1. Վերադարձեք AppDelegate-ը և SceneDelegate-ը (iOS 13+)

Դա անելու եղանակներից մեկը AppDelegate-ը և SceneDelegate-ը հետ բերելն է: Դա կլինի առավել ծանոթ միջոցը նրանց համար, ովքեր մշակում էին iOS հավելվածներ նախքան SwiftUI-ի ներդրումը: Ահա մի օրինակ.

Կարող եք նաև բաց թողնել SceneDelegateը: Այնուհետև դուք վերադառնում եք նույնիսկ հնաոճ ձևին՝ օգտագործելով միայն AppDelegate իրադարձությունները կառավարելու համար:

Վստահ չեմ, թե դեռ որքան ժամանակ այս պատվիրակներին կաջակցեն, բայց առայժմ դա այնքան էլ մեծ խնդիր չի թվում:

2. Օգտագործեք scenePhase-ը .onChange-ով (iOS 14+)

IOS 13-ում UIKit-ից SwiftUI-ին անցնելն իսկական ցավ էր: Համեմատած UIKit-ի հետ, շատ գործառույթներ չէին ներդրվել, և շինարարական տեսքի բաղադրիչները իսկապես զայրացնում էին:

Ինչևէ, iOS 14-ում Apple-ը մի քանի բարելավումներ արեց SwiftUI-ի համար: scenePhase-ը և .onChange-ն այդ իրերի մասերն են: Թույլ տվեք ցույց տալ ձեզ մի օրինակ:

Ինչպես տեսնում եք, դա շատ հեշտ է օգտագործել: Այնուամենայնիվ, կա մի կարևոր թերություն, որ scenePhase-ն առաջարկում է միայն երեք կարգավիճակ՝ active, inactive, background:

Նրանց համար, ովքեր պատկերացնում էին AppDelegate-ի կատարյալ փոխարինում, դա մեծ հիասթափություն կլիներ: Բացի այդ, հասանելիությունը (iOS 14 +) ևս մեկ խոչընդոտ է, որը ծրագրավորողներին դժկամացնում է օգտագործել:

+ onOpenURL (iOS 14+)

Այն պահից, երբ ներդրվեց Համընդհանուր հղումը, այն դարձել է հավելված բացելու սովորական միջոց: Ինչպես գիտեք, SceneDelegate-ը կամ AppDelegate-ը զբաղվում է բացված url-ովիրադարձությամբ: Դա նաև նշանակում է, որ SwiftUI-ում մենք պետք է գտնենք այս իրադարձությունը ստանալու այլ ուղիներ:

Բարեբախտաբար, Apple-ն առաջարկում է onOpenURL մեթոդը iOS 14-ից, որը մեզ հնարավորություն է տալիս ստանալ բացված url իրադարձությունը նախագծի ցանկացած վայրում:

Եթե ​​դուք հետաքրքրված եք, կարող եք դիտել Ունիվերսալ հղում և մաքսային սխեմայի հղում:

3. Ծանուցումների կենտրոն (iOS 4+)

Սա Swift-ով կյանքի ցիկլի իրադարձությունները դիտարկելու ևս մեկ ավանդական միջոց է: UIApplication դասի շրջանակներում iOS-ի կողմից տրամադրվում են մի քանի ծանուցումներ (UIApplicationDelegate | Apple Developer Documentation):

Հատկապես, փաստաթղթում Հավելվածների կյանքի ցիկլի իրադարձություններին արձագանքող կատեգորիայի ծանուցումները կապված են կյանքի ցիկլի իրադարձությունների հետ: Այն ամենը, ինչ դուք պետք է անեք, պարզապես ձեր նպատակին համապատասխան ծանուցում ստանալն է:

Ես ձեզ ցույց կտամ երկու օրինակ՝ ծանուցվելու այն պահին, երբ հավելվածը մուտք է գործում կամ մուտքագրել է յուրաքանչյուր կարգավիճակ այդ Notificationներով:

A. NotificationCenter + addObserver (iOS 4+)

Դա բավականին պարզ և պարզ է հասկանալու համար: Տրվածներից ընտրի՛ր Notificationը և addObserverով ավելացրո՛ւ NotificationCenterին: Այն լավ է աշխատում, ինչպես տեսնում եք:

B. NotificationCenter + Combine (iOS 13+)

Ինչպես կարող եք տեսնել her e-ում, Apple-ն առաջարկում է iOS 13-ից Notifications-ից Combine բաժանորդներին երթուղի անցնելու միջոց:

Կարող է թվալ, որ addObserver-ի օգտագործման նկատմամբ առավելություն չկա, բայց իրականում այն ​​իսկապես հզոր հատկություններ ունի: Դրանով դուք կարող եք գրել ֆունկցիա, որը կազմում է Publisher, ինչպես ստորև:

Դուք կարող եք այն ավելի օգտակար դարձնել՝ իրադարձությունները դասակարգելով enum-ով և տալով ֆունկցիան որպես պարամետր:

Նաև կարող եք օգտագործել այն տարբեր ձևերով՝ փաթաթելով մեթոդը:

Այժմ մենք ունենք շատ օգտակար կյանքի ցիկլի դիտորդ, որը կարող եք ավելացնել հնարավորություններ այնքան, որքան ցանկանում եք:

Դուք կարող եք ընտրել դրանցից մեկը՝ ըստ ձեր կարիքների, բայց ես անձամբ նախընտրում եմ վերջին մեթոդը՝ օգտագործելով Combine: Publisher-ը միանշանակ առավելություններ ունի մյուսների նկատմամբ, քանի որ այն լավ է ընթանում SwiftUI-ի հետ, և Apple-ը շարունակում է փորձել ընդլայնել Combine-ի աջակցությունը:

Շնորհակալություն այն կարդալու համար: