RxSwift ve RxCocoa’yaGiriş
Bugünsizlere 4个版本iOS开发人员hayatımdakullanmaktan ençokkeyifaldığımve beni daha iyi bir开发人员halinegetirdiğineinandığımbiraraçtanbahsetmek istiyorum。 Buyazıyıokuyarakgünümüzdeçokpopülerolan反应性程序,RxSwift和RxCocoa说,迅速发展,大力发展edebilecek seviyeyegeleceğinizeinanıyorum。 首席iOS开发人员olarakçalıştığımBundle News’da dayoğunbirşekildebuyapılarıkullandığımızıve gayet memnunolduğumuzubelirtmek isterim。
RxSwiftkütüphanesi使Swift’i tamamenfarklıbirşekildekullanmamızaolanaksağlıyor。 Bukütüphaneyleasenkron programlama yapmak hemçokkolay hem deçokdahaokunaklıhale geliyor。 dahasağlammimarilertasarlamanızave daha kaliteli uygulamalaryapmanızaolanaksağlıyor。
RxCocoa可以在iOS或OS X上运行,而可乐API可以在反应性中使用。
Buyazıdabilmeniz gereken konseptlerden biri可观察的vediğeriObserver’dır。
- 可观察到的 (gözlemlenebilir),değişiklikleriyayımlayanyapılardır。
- 观察员 (gözlemleyici)yapılar可观察到的yapılara订阅olarak,değişlikolduğundahaberleri olanyapılardır。
RxSwift和RxCocoa,ARC已售出DisposeBag denilen biraraçbulundurmaktadır。 DisposeBag’i观察员objeleritaşıyansanal birçantagibidüşünebiliriz。 Observer’larıtanımladığımızebeveyn objelerin(父对象)hafızadanuçtuğundaObserver’larındandadüzgünbirşekildekurtulmakiçinDisposeBagaracınıkullanırız。
Biraz kavramlar konusundakafanızkarışmışolabilir amayazınındevamındadaha iyianlayacaksınız。
大小RxSwift ve RxCocoakütüphanelerinidaha iyi anlatabilmekiçin反应性tekniklerikullanılmayanufak bir uygulamahazırladım。 Yazınındevamındaadımadımuygulamayı反应性bir haledöndüreceğiz。 咖啡馆,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店,咖啡店和咖啡店。 Projenin ilk halini buradan indirip ,yapılacakdeğişiklikleribenimle birlikteadımadımyapmanızıözellikleöneririm。
不是: Projenin同类儿子halini terminalde
git clone https://github.com/Goktug/RxSwift-RxCocoa-CoffeeShop-Medium.git
komutunu kullanarak GitHub’dan clone’layabilirsiniz。否: Projeyi indirip,zipdosyasındançıkardıktan声音RxSwift ve RxCocoaPod’larınıyüklemekiçinterminalinizden
pod install
komutunuçalıştırmanızgerekmektedir。 Podyüklemesibittikten声音CoffeeShop.xcworkspace
ileaçmalısınız。
Kullanıcıdan 通过电子邮件发送了邮件 。 Burada后端ileiletişimkurangerçekbir认证mekanizmasıkullanmayacağız。 萨迪斯(Sadece)通过电子邮件发送了6封电子邮件。 请发送电子邮件给我,并发送电子邮件给我,并发送电子邮件给我。
LoginViewController.swift
请发送电子邮件至电子邮件,然后输入textfield’lerini和Girişbutonunugörüyoruz。 Bununla birlikte logInButtonPressed()
从头开始,然后从basıldığında到çalışmaktadır。 Gördüğünüzgibişuan texfield’leriçinherhangi bir validatemekanizmasıbulunmuyor。 Şimdibu sayfaya反应性计划prensiplerini kullanarak验证mekanizmasıekleyelim。
RakSwift ve RxCocoakütüphanelerini进口商品。
导入RxSwift
导入RxCocoa类LoginViewController:UIViewController {...}
RxSwift和RxCocoa在文本输入中说出textfield’,然后输入文本。 Bu说ededekullanıcının她的输入邮件正在发送,请发送电子邮件至。 登录登录。但是,登录后才能登录。 非反应性程序,在UITextFieldDelegate
委托中, if/else
则不进行其他操作。 反应性程序说出了自己的名字。
LoginViewController
添加和删除。
私人让disposeBag = DisposeBag()
Dahaöncebahsettiğimgibi DisposeBag
,类“ımızın实例”ıhafızadanuçtuğunda(已分配),观察员“larındandadüzgünbirşekildekurtulmamızı(已处置)”sağlıyor。
Sınıfımızıniçersineaşağıdaki电子邮件doğrulamakodunu ekleyelim。 Bunu daha sonrakullanıcıdanaldığımız电子邮件girdisinidoğrulamakiçinkullanacağız。
Şimdikodumuza throttle
mekanizmasınıEntegre edelim。 Aşağıdakikodusınıfınüstüneekleyelim。
私人让节流阀间隔= 0.1
Aşağıdakikodu daöncekiyazdığımızkodladeğiştirelim。
emailValid
ve passwordValid
&&
操作符,ikisinin de trueolduğudurumda everythingValid
均有效Validdeğişkenimizintrueolmasınıistiyoruz。 Aksi takdirde false
Tipindedöndüreceğiz。 可观察到的登录logInButton
已启用,已启用。 Bu da bize通过电子邮件发送girdilerinindoğruolduğudurumdagirişbutonunumuzun aktifolmasınıvetıklandığındadamenüsayfasınageçilmesineolanaktanıyacaktır。
Azağıdakikodu viewDidLoad
metodunun enaltınaekleyelim。
Şimdibu sayfadaöncellikleRxCocoa kullanarak UITableView
UI komponentimizi反应性yapacağız。 RxCocoa, UITableView
和反应性API中的UITableViewDataSource
UITableViewDelegate
委托中的替代方法均应适用于卡尔梅亚克。 RxCocoa bizimiçinkendisi halledecek。
请选择MenuViewController.swift
然后再选择UITableViewDataSource
UITableViewDelegate
扩展名。
Daha颂歌configureTableView()
支持更多信息。 Artıkbu kodlaraihtiyacımızolmayacak。
tableView.delegate =自我
tableView.dataSource =自我
在UITableViewDelegate
基础上, configureTableView()
tableView configureTableView()
表空间中显示内容。 Oyüzdenaşağıdakikodu eklemeniz gerekmektedir。
tableView.rowHeight = 104
reactiveimdisıramenüdeyer alacak kahve verilerimizi table view’e反应性桦木şekildebağlamayageldi。 在反应堆中的表view’在反应堆中反应不佳。
Bunusağlamakiçin coffees
değişkenini 可观察到的yapmamızgerekiyor。 Koduaşağıdakişekildegüncellememizgerekiyor。
Butonumuzda yer alankırmızıyuvarlağıniçersindekisayısepettekiürünmiktarınagöregüncellenmektedir。 MevcutyapımızdaMenuViewController’view viewWillAppear(:_)
metodunda ShoppingCart
modelimizden toplamsiparişadetini alan ve butondaki badge’igüncelleyenbir kodparçacığıbulunmaktadır。 ShoppingCart
车ShoppingCart
车模型模型coffees
可观察性可观察的视图将出现viewWillAppear(:_)
metodununiçersindesiparişadetinin son halini almak zorundakalmayız。 反应性coffees
壶中的作用,咖啡因coffees
咖啡因的作用而变质。
ShoppingCart.swift
轻松地完成所有任务。
- Burada ilk defa 可观察到 dışındabaşkabiryapıkullanıyoruz。 BehaviorRelay ,在Birwrapper’ıdır中的BehaviourSubject’。 Rx konseptinde 主题 ‘ler hem 可观察的 hem de 观察者 değişkenolarak davranabilen代理ya daköprülerdirdiyebiliriz。 Başkabiryazımdabu konseptleri dahadetaylıaçıklayacağım。 Fakatşimdilikbilmemiz gerekenşey; 行为主题订阅 debişkene, 订阅 olduğumuzdabize和son发出ettiğielemanıdöndürmesidir。
- 行为主题birdeğişkenin 值 parametresineulaşarakSubject’e en儿子发出了edilenelemanıalabiliyoruz。
coffees. value
coffees. value
kodu bize[Coffee: Int]
tipindeki dictionary’imizidöndürüyor。 我的字典,我的字典,我的字典,我的字典,我的字典。 -
accept(:_)
metoduyla行为主题tipindeki birdeğişkeniniçersineyeni bir eleman发出edebiliyoruz。 - Burada da ekleme yaparkenkullandığımızlaaynışekildedeğişkeniniçindeki和儿子değerialıp,gecicideğişkeneatıyoruz。 德文字典-简体中文字典’dençıkartıyoruz。
- Güncellediğimiz字典’i coffeesdeğişkenine发出ediyoruz。
-
getTotalCost()
方法Float
Observable
yerineObservable
döndürenbir metodaçeviriyoruz。 - BehaviourRelay’in下摆可观察下摆观察者gibidavrandığındanbahsetmiştik。
coffees
değişkeniiçersindebulunanelemanlarınfiyat bilgilerinialıp,toplamınıdöndürmemizgerekiyor。 Aynızamanda可观察到的birdeğişkenolarakdöndürmemizlazım。 Bunu yapmakiçincoffees
değişkenini 地图 ‘leyerekiçindekielemanlaraulaşabilirizveistediğimizgibideğiştirebiliriz。 -
getTotalCount()
获取Observable
döndürenbir metodaçeviriyoruz。 - Sepulu bulunan toplam kahve adetini 可观察到的olarakdöndürüyoruz。
-
getCartItems()
方法[CartItem]
Observable
döndürenbir metodaçeviriyoruz。 - Sepetsayfasındabulunan表view’dekullandığımızCartItem modelini 可观察到的 bir阵列olarakdöndürüyoruz。
ShoppingCart
车modelimizartık反应性自行车yapıyaçevrildi。 Bulunla birlikteşuan projeniziçalıştırmakisterseniz Xcode’un birçokyerde hataverdiğinigöreceksiniz。 ProjenizibaşarılıbirşekildeçalıştırabilmekiçinShoppingCart modelinden veriokuduğumuzyerleri de active bir haleçevirmemizgerekiyor。
MenuViewController.swift
视图中删除视图viewWillAppear(:_)
WillAppear viewWillAppear(:_)
metodumuzu tamamen silelim。
Azağıdakikodu viewDidLoad
metodunun enaltınayapıştıralım。
ShoppingCartViewController.swift
文件。 您可以在表格中查看反应性反应堆的硬体情况。 菜单sayfasındaöğrendiğimizşeyleritekrardanbahsetmeyeceğim。 Sadece yeni olaraköğreneceğimiz行/单元silmeolayını反应性桦木ekekildenasılgerçekleştirebileceğimizdenbahsedeceğim。
Şimdiaşağıdakikodu mevcut kodladeğiştirmeklebaşlayalım。
Ad admadımbu kodlar neyapıyorbakalım:
- 反应式扩展中的表视图’已删除
modelDeleted(_:)
已modelDeleted(_:)
metodunadönecekelemanıntipinipaslayıpçağırdığımızdametod bize表视图’den silinenelemanı可观察到的tipindedöndürür。 - Bu Observabledeğişkeni
subscribe(onNext:)
metoduniçindeki封闭’apaslarız。 卜封闭她的细胞silindiğindeçalışacaktır。 - 表格view’den silinen
CartItem
modelimizinbarındırdığıcoffee
objesiniShoppingCart
modelimizden de siliyoruz。 -
subscribe(onNext:)
方法一次性 Tipinde birdeğişkendöndürür。ShoppingCartViewController
在Observer’dandüzgünbirşekildekurtulmakiçinbusınıfındisposeBag’ine eklememiz gerekmektedir中观察到。
Artıkneredeysetümprojemizi反应性桦木yapıyaçevirdik。 Bir tek OrderCoffeeViewController.swiftdosyasıkaldı。 大小不等,大小为evödeviolarakbırakıyorum。
Bu benim Medium’daki同类狂人。 ZamanbuldukçaiOS应用商店ilgiliyazılaryazmayıplanlıyorum。 您必须先完成以下任务。
RxSwift,RxCocoa ile ilgilisorularınızvarsa bana gktggumus@gmail.com adresinden电子邮件yolluylaulaşabilirsiniz。