secon'2016. Мухаметов Андрей, rxswift && apple tv - так ли...
TRANSCRIPT
RxSwift && Apple TV. Так ли хорошо всё новое?
АНДРЕЙ МУХАМЕТОВ, MOBILE DEVELOPER
О чём поговорим?
• New Apple TV • Реактивная парадигма • Постановка задачи • Coding
http://fun.co/rp
New Apple TV в жизни.
1
Взгляд пользователя
• AppStore • Крутой пульт • Толще? :) • Поддержка геймпада • Поддержка Apple Keyboard с tvOS 9.2
Взгляд разработчика
• AppStore • Железо, как в iPhone 6 • TVMLJS && TVMLKit для JavaScript • tvOS SDK идентично iOS SDK • Ограничение размера в 200MB • Ограничение в 500 KB на локальное
хранение файлов
Реактивное программирование
2
С чем подавать?
• Потоки данных • Реакция • Асинхронность
Основные понятия
• Sequence • Observer • Observable
Почему RxSwift?
• Мультиязычный фреймворк • Поддержка CocoaPods • Хорошая документация и примеры
Less talk, more action
3
Задача
• Загрузка бесконечного потока контента
через REST API • Отображение ленты контента в виде
плиток • Автоматическая прокрутка ленты
изображений
Инструменты
• tvOS SDK 9.2 • Alamofire • ObjectMapper • RxSwift
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 } }
ObjectMapper + Alamofire
• Удобный маппинг объектов • Полностью заменяет все средства
RestKIT • Поддерживает маппинг в объекты из
JSON и обратно • Поддержка структур
Смотрим код Swift
RxSwift
5
RxSwift
• Поддерживаются большинство
операторов ReactiveX • RxCocoa для работы с UI • Хорошие примеры на swift, как часть
документации
Операторы ReactiveX
• Creating • Transforming • Filtering • Combining • Observable Utility • Conditional and Boolean
http://goo.gl/CuyR1m
Filter
SkipUntil
SkipWhile
StartWith
Dispose
• .dispose() - Уничтожение подписки • DisposeBag - для множества подписок
RxCocoa
6
Возможности RxCocoa
• UITableView && UICollectionView • Inheritors of UIControl • Cocoa Reactive KVO
Реактивный UICollectionView
Реактивный таймер
Не реактивный таймер
Подгружаем поток данных
Мои ошибки
• Игнорировал viewModel и извлекал
данные по индексу из массива. • Не использовал RxCocoa KVO для
contentOffset
Подгружаем данные реактивно
Особенность Apple TV и её обход
Смотрим stacktrace для отладки
Добавляем пульт
Резюме
• Apple TV • RxSwift • Alamofire + ObjectMapper
Впечатления
• Красивый и изящный код. • Нужно научиться мыслить реактивно. • Сложная отладка
[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
Спасибо за внимание
АНДРЕЙ МУХАМЕТОВ, MOBILE DEVELOPER