SwiftBondをSwift3対応するためにv5にマイグレーションする

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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 to observeOn.
  • 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. Use DispatchQueue instead.