- Հետ բերեք
AppDelegate
-ը ևSceneDelegate
-ը (iOS 13+) scenePhase
,.onChange
և.onOpenUrl
(iOS 14+)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
-ի աջակցությունը:
Շնորհակալություն այն կարդալու համար: