Swift3対応するためにSwiftBondをv5にします。v4の時とそこそこ変わっています。
なお、beta7で試したのでリリース版では変わっているかもしれません。
Podfile
自分はcocoapodsを使っているので
- pod 'Bond', '~> 4.3'
+ pod 'Bond', :git => 'git@github.com:SwiftBond/Bond.git', :tag => 'v5.0.0-beta7'
TableViewやCollectionViewとのbind
プロパティ
ネストしていたと思いますが、必要なくなります。
また、MutableとImmutableの区別ができました。
- private(set) var dataSource: ObservableArray<ObservableArray<Any>>!
- private(set) var dataSource = ObservableArray<ObservableArray<HogeEntity>>([ObservableArray<HogeEntity>()])
+ fileprivate(set) var dataSource: ObservableArray<Any>!
+ fileprivate(set) var dataSource = MutableObservableArray<HogeEntity>([HogeEntity]())
まとめて変更
extend
メソッドはなくなって replace
メソッドができました。
- func changeHoges(entities: [HogeEntity]) {
- self.dataSource.removeAll()
- let observableArray = ObservableArray<HogeEntity>()
- entities.forEach { (entity) in
- observableArray.append(entity)
- }
- self.dataSource.extend([observableArray])
+ func changeHoges(_ entities: [HogeEntity]) {
+ self.dataSource.removeAll()
+ self.dataSource.replace(with: entities, performDiff: true)
replaceメソッドはEquatableに適応されているクラスだけ利用できるのでそうします。
class HogeEntity {
}
+func == (left: HogeEntity, right: HogeEntity) -> Bool {
+ return left.id == right.idd
+}
+extension HogeEntity: Equatable {
+}
bind部分
bindTo
が ```bind`` `に変わりました。また、クロージャーの引数の順番が変わっています。
- domain.dataSource.bindTo(collectionView, proxyDataSource: nil, createCell: { (indexPath, array, collectionView) -> UICollectionViewCell in
- let entity = array[indexPath.section][indexPath.row] as! HogeEntity
+ domain.dataSource.bind(to: collectionView) { (array, indexPath, collectionView) -> UICollectionViewCell in
+ let entity = array[indexPath.row] as! HogeEntity
- domain.dataSource.bindTo(tableView) { (indexPath, array, tableView) -> UITableViewCell in
- let entity = array[indexPath.section][indexPath.row]
+ domain.dataSource.bind(to: tableView) { (array, indexPath, tableView) -> UITableViewCell in
+ let entity = array[indexPath.row]
ovserve
observeNextに変わりました。
override func viewDidLoad() {
- domain.mode.observe { [weak self] modeType in
+ domain.mode.observeNext { [weak self] modeType in
その他
上記以外の変更は、公式ページに書いてある通りです。
EventProducer
is removed. Use Signal from >ReactiveKit for reactive programming.- Operator
deliverOn
is renamed toobserveOn
.ObservableArray
is reimplemented. Mapping and filtering it is not supported any more.- KVO can now be established using thr method
valueFor(keyPath:)
on any NSObject subclass.Queue
is removed. UseDispatchQueue
instead.