LoginSignup
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-09-23

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.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2