4. Что нас ждет
Сложности написания кода
Школьные уравнения с параметрами и фича флаги
Усложняем параметры с помощью ООП
Иерархия значений параметров
Реализация на современном Swift
Раздел, где я повторю все, что говорил в самом начале
22. Что хотим
• Простое использование
• Дебаг меню
• Поддержка иерархии значений
• Собственные параметры у каждого модуля
• Возможность разделять параметры между модулями
• Возможность передавать параметры по сети (энкодинг)
23. class MainSettings: Settings {
fileprivate static let shared = MainSettings()
@Flag.Internal var serverEnvironment = ServerEnvironment.release
@Section<DiskCacheSettings> var diskCacheSettings
@Flag.Internal var firebaseUpdateInterval = 43200.0
}
func flag<V>(_ keyPath: KeyPath<MainSettings, V>) -> V {
MainSettings.shared[keyPath: keyPath]
}
flag(.serverEnvironment).url
24. enum ServerEnvironment: String, CaseIterable, LosslessStringConvertible {
case release
case preStable
case test
case dev
var url: URL {
let urlString: String
switch self {
case .release:
urlString = "https://api.example.com"
case .preStable:
urlString = "https://pre-stable.api.example.com"
case .test:
urlString = "https://test.api.example.com"
case .dev:
urlString = "https://dev.api.example.com"
}
return URL(string: urlString)!
}
var description: String { rawValue }
init?(_ description: String) {
self.init(rawValue: description)
}
}
25.
26. class DiskCacheSettings: Settings {
@Info<CacheSizeProvider> var cacheCurrentSize
@Action<ClearCacheCommand> var clearCache
@Flag var cacheSize = 1_000
@Flag var cacheImageSize = 700
@Flag var cacheVideoSize = 300
}
27. class DiskCacheSettings: Settings {
@Info<CacheSizeProvider> var cacheCurrentSize
@Action<ClearCacheCommand> var clearCache
@Flag var cacheSize = 1_000
@Flag var cacheImageSize = 700
@Flag var cacheVideoSize = 300
}
28. Раздел, где я повторяю все,
что говорил в самом начале