Rx iOS dwa bratanki

96
Rx - iOS dwa bratanki… PIOTR GUZIA

Transcript of Rx iOS dwa bratanki

Page 1: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PIOTR GUZIA

Page 2: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

KIM JESTEM….? ZWYCIĘZCĄ!!!

▸ iOS Developer 20 miesięcy

▸ .NET Developer 30 miesięcy

▸ Muzyk 157 miesięcy

▸ @: [email protected]

▸ github.com/guziaster

Page 3: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

O CZYM POWIEM?

Page 4: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

O CZYM POWIEM?

▸ O co chodzi z tym programowaniem reaktywnym?

Page 5: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

O CZYM POWIEM?

▸ O co chodzi z tym programowaniem reaktywnym?

▸ Everything is an observable stream

Page 6: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

O CZYM POWIEM?

▸ O co chodzi z tym programowaniem reaktywnym?

▸ Everything is an observable stream

▸ Subjects

Page 7: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

O CZYM POWIEM?

▸ O co chodzi z tym programowaniem reaktywnym?

▸ Everything is an observable stream

▸ Subjects

▸ Operatory

Page 8: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

O CZYM POWIEM?

▸ O co chodzi z tym programowaniem reaktywnym?

▸ Everything is an observable stream

▸ Subjects

▸ Operatory

▸ Tips n’ Tricks

Page 9: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PROGRAMOWANIE REAKTYWNE

Page 10: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PROGRAMOWANIE REAKTYWNE

▸ Kolejny paradygmat programowania…

Page 11: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PROGRAMOWANIE REAKTYWNE

▸ Kolejny paradygmat programowania…

▸ Opiera się na asynchronicznym przekazywaniu sygnałów między obserwatorem a zainteresowanymi

Page 12: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PROGRAMOWANIE REAKTYWNE

▸ Kolejny paradygmat programowania…

▸ Opiera się na asynchronicznym przekazywaniu sygnałów między obserwatorem a zainteresowanymi

▸ Dużo sznureczków i kropeczek…

Page 13: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PROGRAMOWANIE REAKTYWNE

▸ Kolejny paradygmat programowania…

▸ Opiera się na asynchronicznym przekazywaniu sygnałów między obserwatorem a zainteresowanymi

▸ Dużo sznureczków i kropeczek…

Page 14: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RX MARBLES

Page 15: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RX MARBLES

Page 16: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RX MARBLES

Page 17: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

Page 18: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

Page 19: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

Page 20: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

Page 21: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

Page 22: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

▸ Observable… observable… wszędzie observable….

Page 23: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

▸ Observable… observable… wszędzie observable….

Page 24: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

EVERYTHING IS AN OBSERVABLE STREAM

▸ Observable… observable… wszędzie observable….

Page 25: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

SUBJECTS

Page 26: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

SUBJECTS

▸ PublishSubject

Page 27: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

SUBJECTS

▸ PublishSubject

▸ BehaviorSubject

Page 28: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

SUBJECTS

▸ PublishSubject

▸ BehaviorSubject

▸ ReplaySubject

Page 29: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

SUBJECTS

▸ PublishSubject

▸ BehaviorSubject

▸ ReplaySubject

▸ Variable

Page 30: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PUBLISH SUBJECT

Page 31: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PUBLISH SUBJECT

▸ Przy inicjalizacji są puste i przekazują dalej tylko nowe elementy

Page 32: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PUBLISH SUBJECT

▸ Przy inicjalizacji są puste i przekazują dalej tylko nowe elementy

Page 33: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PUBLISH SUBJECT

▸ Przy inicjalizacji są puste i przekazują dalej tylko nowe elementy

Page 34: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

BEHAVIOR SUBJECT

Page 35: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

BEHAVIOR SUBJECT

▸ Do inicjalizacji konieczne jest podanie wartości startowej, po zasubskrybowaniu powtarza ostatnią wartość

Page 36: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

BEHAVIOR SUBJECT

▸ Do inicjalizacji konieczne jest podanie wartości startowej, po zasubskrybowaniu powtarza ostatnią wartość

Page 37: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

BEHAVIOR SUBJECT

▸ Do inicjalizacji konieczne jest podanie wartości startowej, po zasubskrybowaniu powtarza ostatnią wartość

Page 38: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

REPLAY SUBJECTS

Page 39: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

REPLAY SUBJECTS

▸ Inicjalizacja wymaga podania rozmiaru tego obiektu. Po każdej subskrypcji wszystkie elementy będą zawsze powtarzane.

Page 40: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

REPLAY SUBJECTS

▸ Inicjalizacja wymaga podania rozmiaru tego obiektu. Po każdej subskrypcji wszystkie elementy będą zawsze powtarzane.

Page 41: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

REPLAY SUBJECTS

▸ Inicjalizacja wymaga podania rozmiaru tego obiektu. Po każdej subskrypcji wszystkie elementy będą zawsze powtarzane.

Page 42: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

VARIABLE

Page 43: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

VARIABLE

▸ Obudowanie na Behavior Subject - zachowuje się tak samo ale przechowuje obecny stan - Value, który dodatkowo daje możliwość edycji elementów jak zwykły Array

Page 44: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

VARIABLE

▸ Obudowanie na Behavior Subject - zachowuje się tak samo ale przechowuje obecny stan - Value, który dodatkowo daje możliwość edycji elementów jak zwykły Array

Page 45: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

VARIABLE

▸ Obudowanie na Behavior Subject - zachowuje się tak samo ale przechowuje obecny stan - Value, który dodatkowo daje możliwość edycji elementów jak zwykły Array

Page 46: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY

Page 47: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY

▸ Filtrujące

Page 48: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY

▸ Filtrujące

▸ Transformujące

Page 49: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY

▸ Filtrujące

▸ Transformujące

▸ Złączające

Page 50: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY FILTRUJĄCE

Page 51: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY FILTRUJĄCE

▸ Distinct

Page 52: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY FILTRUJĄCE

▸ Distinct

▸ ElementAt

Page 53: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY FILTRUJĄCE

▸ Distinct

▸ ElementAt

▸ Throttle

Page 54: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY FILTRUJĄCE

▸ Distinct

▸ ElementAt

▸ Throttle

▸ Debounce

Page 55: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY FILTRUJĄCE

▸ Distinct

▸ ElementAt

▸ Throttle

▸ Debounce

Page 56: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE

Page 57: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE

▸ Map

Page 58: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE

▸ Map

▸ FlatMap

Page 59: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE

▸ Map

▸ FlatMap

▸ FlatMapLatest

Page 60: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE

▸ Map

▸ FlatMap

▸ FlatMapLatest

▸ GroupBy

Page 61: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE - FLATMAP

Page 62: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE - FLATMAP

Page 63: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY TRANSFORMUJĄCE - FLATMAP

Page 64: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

Page 65: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

▸ Concat

Page 66: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

▸ Concat

▸ CombineLatest

Page 67: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

▸ Concat

▸ CombineLatest

Page 68: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

▸ Concat

▸ CombineLatest

▸ Merge

Page 69: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

▸ Concat

▸ CombineLatest

▸ Merge

Page 70: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

OPERATORY ZŁĄCZAJĄCE

▸ Concat

▸ CombineLatest

▸ Merge

▸ Zip

Page 71: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

Requests Chaining - zip

Page 72: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

Requests Chaining - zip

Page 73: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxCocoa

Page 74: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxCocoa

▸ Obserwowanie zmian w UI

Page 75: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxCocoa

▸ Obserwowanie zmian w UI

Page 76: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxCocoa

▸ Obserwowanie zmian w UI

Page 77: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxAnimatableDataSource

Page 78: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxAnimatableDataSource

▸ Bindowanie danych bezpośrednio do tabeli

Page 79: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxAnimatableDataSource

▸ Bindowanie danych bezpośrednio do tabeli

▸ Animacje przy edycji wierszy

Page 80: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

RxAnimatableDataSource

▸ Bindowanie danych bezpośrednio do tabeli

▸ Animacje przy edycji wierszy

▸ Krótszy kod w porównaniu do UITableViewDataSource

Page 81: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

Bonus

Page 82: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

Bonus

▸ RxMoya

▸ RxAlamofire

▸ I inne…

Page 83: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

Bonus

▸ RxMoya

▸ RxAlamofire

▸ I inne…

Page 84: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

Page 85: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

+

Page 86: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea+

Page 87: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

+

Page 88: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

+

Page 89: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

▸ Sporo praktycznych dodatków przyspieszających pracę

+

Page 90: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

▸ Sporo praktycznych dodatków przyspieszających pracę

▸ Wiele popularnych bibliotek wspiera Rx

+

Page 91: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

▸ Sporo praktycznych dodatków przyspieszających pracę

▸ Wiele popularnych bibliotek wspiera Rx

+ -

Page 92: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

▸ Sporo praktycznych dodatków przyspieszających pracę

▸ Wiele popularnych bibliotek wspiera Rx

▸ Wysoki próg wejścia+ -

Page 93: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

▸ Sporo praktycznych dodatków przyspieszających pracę

▸ Wiele popularnych bibliotek wspiera Rx

▸ Wysoki próg wejścia

▸ Specyficzny kod

+ -

Page 94: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

PODSUMOWANIE

▸ Wieloplatformowa idea

▸ Mniej kodu

▸ Asynchroniczne działanie

▸ Sporo praktycznych dodatków przyspieszających pracę

▸ Wiele popularnych bibliotek wspiera Rx

▸ Wysoki próg wejścia

▸ Specyficzny kod

▸ Trudniejsze debugowanie

+ -

Page 95: Rx iOS dwa bratanki

Rx - iOS dwa bratanki…

ŹRÓDŁA I PRZYKŁADY

▸ http://reactivex.io/

▸ https://github.com/ReactiveX/RxSwift

▸ https://github.com/RxSwiftCommunity

▸ https://itunes.apple.com/pl/app/rxmarbles/id1087272442?l=pl&mt=8

▸ http://adamborek.com

▸ http://rxswift-slack.herokuapp.com

Page 96: Rx iOS dwa bratanki

Q&A