在Swift(2)中使用UITableView-与RxSwift
正如我们在上一篇文章中介绍了UITableView
的基本用法之后,这次我们将将该示例转换为一个使用RxSwift
处理UITableView
。
RxSwift是一个更高级的主题。 请注意,这个故事仅演示了基础知识,但是可以肯定的是,如果广泛且正确地使用它,它可以将您和您的应用程序提升到另一个层次。 本教程的源代码可在Github上获得。
我们将从创建另一个安装了Cocoapods
和RxSwift
Xcode项目开始。
$ pod init
将RxSwift
添加到Podfile
。
...#UITableView吊舱“ RxSwift”的吊舱
豆荚“ RxCocoa”
...
安装pod并打开UITableView.xcworkspace
。
$ pod安装
初始设置
首先通过在UIViewController
导入RxSwift
和RxCocoa
,然后我们可以将代码转换为Rx样式。
导入RxSwift
进口RxCocoa
这次,我们还需要在UITableView
通过以下JSON显示数据。
// travel.json
[
{
“名称”:“香港”,
“ desc”:“我住的地方。”,
“ url”:“
https://zh.wikipedia.org/wiki/香港
},
{
“名称”:“新加坡”,
“ desc”:“一个干净整洁的地方。”,
“ url”:“
https://zh.wikipedia.org/wiki/新加坡”
},
{
“ name”:“ Japan”,
“ desc”:“喜欢那些美味的寿司和生鱼片。”,
“ url”:“
https://zh.wikipedia.org/wiki/日本”
}
]
它是在这里https://api.myjson.com/bins/16w6h0作为API生成的。 然后,我们的模型如下。
结构位置:可分解{
命名:字符串
let desc:字符串
让网址:字符串
}
转换代码
无需声明Place数组,而是将其声明为BehaviorRelay
作为可以订阅的Observable
,即,当更新此Place时 ,将发出某种事件来捕获它。
让disposeBag = DisposeBag()
让地方:BehaviorRelay = BehaviorRelay(值:[])
当我们实现提取数据方法时, BehaviorRelay
的值将相应地更新。
func fetchData(){
如果让url = URL(string:“ https://api.myjson.com/bins/16w6h0”){
URLSession.shared.dataTask(with:url){数据,响应,错误
如果让数据=数据{
做{
让地方=尝试JSONDecoder()。decode([地方] .self,来自:数据)
self.places.accept(places)
}捕获让错误{
打印(错误)
}
}
}。恢复()
}
}
我们可以先前丢弃UITableViewDataSource
的方法,并将BehaviorRelay
绑定到UITableView
以获得相同的结果。
place.bind(to:tableView.rx.items(cellIdentifier:“ cell”)){行,模型,单元格在
cell.textLabel?.text =“ \(model.name),\(model.desc)”
} .disposed(作者:disposeBag)
所以我们做到了! 用RxSwift
方式RxSwift
UITableView
东西。 实际上,我们可以如下处理表格单元格单击事件以轻松打开Web视图。
tableView.rx.modelSelected(Place.self)
.map {URL(string:$ 0.url)}
.subscribe(onNext:{[弱自我]网址
警卫让url = url else {
返回
}
self?.present(SFSafariViewController(url:url),动画:true)
} .disposed(作者:disposeBag)
这是UITableView
和RxSwift
演示的结尾。
本教程的源代码可在Github上找到,希望您会发现它有用:)。
干杯!