Skip to content

Instantly share code, notes, and snippets.

View JohnSundell's full-sized avatar

John Sundell JohnSundell

View GitHub Profile
class ViewController: UIViewController {
private let modelLoader: AnyModelLoader<MyModel>
init<T: ModelLoading>(modelLoader: T) where T.Model == MyModel {
self.modelLoader = AnyModelLoader(loader: modelLoader)
super.init(nibName: nil, bundle: nil)
}
}
class ViewController: UIViewController {
private let loadModel: ((Result<MyModel>) -> Void) -> Void
init<T: ModelLoading>(modelLoader: T) where T.Model == MyModel {
loadModel = modelLoader.load
super.init(nibName: nil, bundle: nil)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadModel { result in
switch result {
case .success(let model):
render(model)
case .error(let error):
render(error)
}
struct ModelSequence: Sequence {
func makeIterator() -> ModelIterator {
return ModelIterator()
}
}
struct ModelIterator: IteratorProtocol {
private let database: Database
private var index = 0
init(database: Database = .shared) {
self.database = database
}
mutating func next() -> Model? {
let model = database.model(at: index)
func searchForModel(matching query: String) -> Model? {
for model in ModelSequence() {
if model.title.contains(query) {
return model
}
}
return nil
}
class ModelLoader {
func loadAllModels() -> AnySequence<Model> {
return AnySequence { () -> AnyIterator<Model> in
var index = 0
return AnyIterator {
let model = database.model(at: index)
index += 1
return model
}
startime=$(<buildtimes.log)
endtime=$(date +%s)
deltatime=$((endtime-startime))
newline=$'\n'
echo "[Start] $startime$newline[End] $endtime$newline[Delta] $deltatime" > "buildtimes.log"