secon'2016. Мухаметов Андрей, rxswift && apple tv - так ли...

39
RxSwift && Apple TV. Так ли хорошо всё новое? АНДРЕЙ МУХАМЕТОВ, MOBILE DEVELOPER

Upload: secon

Post on 15-Apr-2017

162 views

Category:

Software


1 download

TRANSCRIPT

Page 1: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

RxSwift && Apple TV. Так ли хорошо всё новое?

АНДРЕЙ МУХАМЕТОВ, MOBILE DEVELOPER

Page 2: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

О чём поговорим?

• New Apple TV • Реактивная парадигма • Постановка задачи • Coding

http://fun.co/rp

Page 3: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

New Apple TV в жизни.

1

Page 4: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Взгляд пользователя

• AppStore • Крутой пульт • Толще? :) • Поддержка геймпада • Поддержка Apple Keyboard с tvOS 9.2

Page 5: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Взгляд разработчика

• AppStore • Железо, как в iPhone 6 • TVMLJS && TVMLKit для JavaScript • tvOS SDK идентично iOS SDK • Ограничение размера в 200MB • Ограничение в 500 KB на локальное

хранение файлов

Page 6: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Реактивное программирование

2

Page 7: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

С чем подавать?

• Потоки данных • Реакция • Асинхронность

Page 8: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Основные понятия

• Sequence • Observer • Observable

Page 9: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Почему RxSwift?

• Мультиязычный фреймворк • Поддержка CocoaPods • Хорошая документация и примеры

Page 10: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Less talk, more action

3

Page 11: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Задача

• Загрузка бесконечного потока контента

через REST API • Отображение ленты контента в виде

плиток • Автоматическая прокрутка ленты

изображений

Page 12: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Инструменты

• tvOS SDK 9.2 • Alamofire • ObjectMapper • RxSwift

Page 13: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

REST API

https://goo.gl/g1C1Yu

Page 14: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Alamofire router

enum Router: URLRequestConvertible { static let baseURLString = "http://web-api.ifunny.mobi/ifunny/v1/feeds/featured" case GetFeatured(next: String?) var URLRequest: NSMutableURLRequest { let parameters: ([String: AnyObject]) = { switch self { case .GetFeatured(let next) where next != nil: return (["next": next!]) case .GetFeatured(_): return ([:]) } }() let URL = NSURL(string: Router.baseURLString)! let URLRequest = NSURLRequest(URL: URL) let encoding = Alamofire.ParameterEncoding.URL return encoding.encode(URLRequest, parameters: parameters).0 } }

Page 15: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

ObjectMapper + Alamofire

• Удобный маппинг объектов • Полностью заменяет все средства

RestKIT • Поддерживает маппинг в объекты из

JSON и обратно • Поддержка структур

Page 16: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Смотрим код Swift

Page 17: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

RxSwift

5

Page 18: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

RxSwift

• Поддерживаются большинство

операторов ReactiveX • RxCocoa для работы с UI • Хорошие примеры на swift, как часть

документации

Page 19: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Операторы ReactiveX

• Creating • Transforming • Filtering • Combining • Observable Utility • Conditional and Boolean

http://goo.gl/CuyR1m

Page 20: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Filter

Page 21: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

SkipUntil

Page 22: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

SkipWhile

Page 23: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

StartWith

Page 24: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Dispose

• .dispose() - Уничтожение подписки • DisposeBag - для множества подписок

Page 25: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

RxCocoa

6

Page 26: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Возможности RxCocoa

• UITableView && UICollectionView • Inheritors of UIControl • Cocoa Reactive KVO

Page 27: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Реактивный UICollectionView

Page 28: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Реактивный таймер

Page 29: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Не реактивный таймер

Page 30: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Подгружаем поток данных

Page 31: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Мои ошибки

• Игнорировал viewModel и извлекал

данные по индексу из массива. • Не использовал RxCocoa KVO для

contentOffset

Page 32: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Подгружаем данные реактивно

Page 33: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Особенность Apple TV и её обход

Page 34: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Смотрим stacktrace для отладки

Page 35: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Добавляем пульт

Page 36: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Резюме

• Apple TV • RxSwift • Alamofire + ObjectMapper

Page 37: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Впечатления

• Красивый и изящный код. • Нужно научиться мыслить реактивно. • Сложная отладка

Page 38: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

[NSURL]

• https://github.com/ReactiveX/RxSwift/ • https://github.com/Alamofire/Alamofire • https://github.com/Hearst-DD/ObjectMapper • https://github.com/tristanhimmelman/AlamofireObjectMapper • http://reactivex.io/ • https://www.youtube.com/watch?v=dwP1TNXE6fc • https://www.raywenderlich.com/121540/alamofire-tutorial-

getting-started • https://github.com/chiahsien/

CHTCollectionViewWaterfallLayout

Page 39: SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

Спасибо за внимание

АНДРЕЙ МУХАМЕТОВ, MOBILE DEVELOPER

[email protected]