WaitForit membuat menerapkan skenario aplikasi iOS umum menjadi mudah:
Berurusan dengan logika semacam ini biasanya melibatkan menyimpan data secara manual ke UserDefaults dan harus diperbarui dari awal untuk setiap skenario.
WaitForit menyediakan API deklaratif sederhana yang memungkinkan Anda menangani sebagian besar skenario yang mungkin tanpa khawatir tentang implementasi yang mendasar.
ScenarioProtocol memiliki sifat -sifat berikut yang dapat digunakan untuk menentukan kapan skenario harus dieksekusi:
protocol ScenarioProtocol {
// minimum number of scenario events needed to be trigerred before scenario can be executed
static var minEventsRequired : Int ? { get set }
// maximum number of scenario events which can be trigerred before scenario stops executing
static var maxEventsPermitted : Int ? { get set }
// maximum number of times that scenario can be executed
static var maxExecutionsPermitted : Int ? { get set }
// minimum time interval, after the first scenario event was trigerred, before the scenario can be executed
static var minSecondsSinceFirstEvent : TimeInterval ? { get set }
// minimum time interval, after the last scenario event was trigerred, before the scenario can be executed
static var minSecondsSinceLastEvent : TimeInterval ? { get set }
// minimum time interval before scenario can be executed again after previous execution
static var minSecondsBetweenExecutions : TimeInterval ? { get set }
// custom conditions closure
static var customConditions : ( ( ) -> Bool ) ? { get set }
} Skenario adalah struct sederhana yang mengimplementasikan fungsi config tunggal. Anda menggunakannya untuk mengkonfigurasi nilai yang menentukan ketika skenario yang diberikan akan dijalankan.
Anda dapat beroperasi pada struct skenario menggunakan metode statis:
// increment scenario specific event counter
static func triggerEvent ( )
// try to execute a scenario (it counts as executed only if bool param passed into a block was `true`)
static func tryToExecute ( completion : @escaping ( Bool ) -> Void )
// reset scenario event and execution counters
static func reset ( )Katakanlah Anda ingin menampilkan layar tutorial hanya sekali:
import WaitForIt
struct ShowTutorial : ScenarioProtocol {
static func config ( ) {
maxExecutionsPermitted = 1
}
}
// In ViewController.swift
func viewDidLoad ( ) {
super . viewDidLoad ( )
ShowTutorial . tryToExecute { didExecute in
if didExecute {
self . showTutorial ( )
}
}
} Itu saja! Anda tidak perlu lagi berurusan dengan UserDefaults sendiri. Cukup konfigurasikan struct dengan kondisi eksekusi yang benar, dan Lib mengurus sisanya. Ketika semua kondisi untuk skenario Anda terpenuhi, nilai bool yang dilewatkan di dalam blok tryToExecute akan true .
Mari kita coba skenario yang sedikit lebih kompleks. Anda ingin meminta pengguna untuk membeli langganan, jika dia menginstal aplikasi setidaknya 1 minggu yang lalu dan menyalakannya setidaknya 5 kali. Anda ingin bertanya kepadanya sekali setiap 2 hari tetapi tidak lebih dari total 4 kali:
import WaitForIt
struct AskToSubscribe : ScenarioProtocol {
static func config ( ) {
minEventsRequired = 5
minSecondsSinceFirstEvent = 604 800 // seconds in one week
maxExecutionsPermitted = 4
minSecondsBetweenExecutions = 172 800 // seconds in two days
}
}
// In AppDelegate.swift
func application ( _ application : UIApplication ,
didFinishLaunchingWithOptions launchOptions : [ UIApplicationLaunchOptionsKey : Any ] ? ) -> Bool {
AskToSubscribe . triggerEvent ( )
AskToSubscribe . tryToExecute { didExecute in
if didExecute {
self . askToSubscribe ( )
}
}
return true
}Jika kondisi berbasis waktu dan acara tidak cukup untuk skenario Anda, Anda juga dapat menentukan penutupan kondisi khusus. Ini akan dievaluasi setiap kali Anda mencoba menjalankan skenario:
struct ShowLowBrightnessAlertOnce : ScenarioProtocol {
static func config ( ) {
customConditions = {
return UIScreen . main . brightness < 0.3
}
maxExecutionsPermitted = 1
}
}Cerita yang lebih kompleks dapat diimplementasikan jika Anda memutuskan untuk mencampur kondisi dari lebih dari satu skenario struct. Tentu saja Anda juga dapat menyebarkan pemicu acara dan eksekusi skenario di seluruh aplikasi, mereka tidak perlu berada di file yang sama.
Implementasi didasarkan pada UserDefaults standar sehingga data tidak akan bertahan jika aplikasi diinstal ulang. Nama -nama kunci UserDefaults dihasilkan dengan nama struct, jadi mengganti nama struct akan mengatur ulang semua datanya. Anda juga dapat mengatur ulang data yang bertahan menggunakan metode reset() .
Di Cartfile Anda:
github "pawurb/WaitForIt" ~> 2.0.0
Di Podfile Anda:
platform :ios , '10.0'
use_frameworks!
target 'TargetName' do
pod 'WaitForIt'
end Lib digunakan dalam produksi tetapi masih dalam tahap awal pengembangan. Saran tentang bagaimana itu bisa ditingkatkan dipersilakan.