Полезности для перечитывания

FlatMap против nil

Если функция (метод или инициализатор) может вернуть nil, а мы будем использовать эту функцию в качестве преобразователя в .map, то можно сразу отсеять элементы nil и вернуть не опциональные элементы

//
//  proSwift.ru
//

class Event {
    init?(...) {
        ...
        return someValue

        else ...
        return nil
    }
}

objects.map(Event.init) // [obj1?, obj2?, nil, obj4?, nil, nil, obj6?]

objects.flatMap(Event.init) // [obj1, obj2, obj4, obj6]

Вызовы Event.init могут вернуть nil, а flatMap на этих объектах удалит любые значения nil, поэтому на выходе мы получим объекты Event (не опциональные!)

Лог потоков

Вывод в консоль лога по потокам:

//
//  proSwift.ru
//

print("main: \(Thread.isMainThread)") // Проверка - это основной поток?
print("Thread: \(Thread.current)") .  // Вывод данных о потоке

Консоль:

main: true
Thread: <NSThread: 0x608000077680>{number = 1, name = main}

...

main: false
Thread: <NSThread: 0x608000274ac0>{number = 3, name = (null)}




Reduce для Observable

//
//  proSwift.ru
//

example(of: "reduce") { 
    let source = Observable.of(1,2,3,4,5,6)
    let obs = source.reduce(0, accumulator: +) // выдаст элемент только когда source закончится.
    obs.subscribe(onNext: { print($0) })
}

Reduce (_: _ 🙂 создает сводное (накопленное) значение только тогда, когда завершается исходный наблюдаемый. Применение этого оператора к последовательностям, которые никогда не завершатся, не испускает ничего. Это частый источник путаницы и скрытых проблем

Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.