LoginSignup
17
15

More than 5 years have passed since last update.

SwiftBondをver4.Xへ移行したときのメモ

Last updated at Posted at 2015-10-18

以前"SwiftBondを使ってみての所感"という記事を書いたのですが、バージョンを4.0.0に、つまりSwift 2に対応したものにアップデートして実装しなおしたのでそのときのメモを書いておきます。

公式のドキュメントとしては以下に書かれています。

他のライブラリのSwift 2移行にともなうdiffとか全然みていないのでですが(Alamofireは自分が使う範囲内であればそれほど変更入れずに使えました)、

It's core has been rewritten from scratch and ...

とあるように(It'sは厳密にはItsかな??)、SwiftBondはかなり大幅なAPIの変更があります

DynamicObservable

Dynamic becomes Observable

とあるように

var someCount  = Dynamic<Int>(0)

var someCount  = Observable <Int>(0)

になります

DynamicArrayObservableArray

var someList = DynamicArray<Some>([])

var someList = ObservableArray <Some>([])

になります。またメソッドも結構変わったので、利用するときは、ドキュメントがそれほどまだ整備されていないので、ObservableArray.swiftのファイルの中身みておくと良いかもです。

今回実際に修正したものは以下になります

self.list.removeAll(false)

self.list.append(list)

self.list.removeAll() // 引数がなくなった

self.list.extend(list) // 配列を足すときにappendがextendになった

に修正

プリフィックスがdynからbnd_

以前の記事にも書いたのですが、SwiftBondではUIKitのプロパティにバインディングするときにはdynTextのようにdynというプリフィックスがついたものを利用していたのですが、

group.name ->> cell.nameLabel.dynText

group.name.bindTo(cell.nameLabel.bnd_text)

になります

->>よりもbindTo()を推奨に

上の例がそのまま使えるのですが、->>らのオペレータよりもbindTo()メソッドを推奨する、とのことです。

UITableViewまわり

いろいろ複雑だったテーブルまわりの書き方が整理されたかなという印象。
これまでどう書いていたかは以前の記事にある通りなのですが、以下のような感じで書くことができるようになります

var list = ObservableArray<Some>([])

//...

self.list.lift().bindTo(self.someTableView) { (indexPath, array, tableView) -> UITableViewCell in
    let cell = SomeTableViewCell()
    let some = array[0][indexPath.row]

    // バインディング処理を諸々書く
    some.body.bindTo(cell.bodyLabel!.bnd_text)

    return cell
}

ドキュメントとしてはこちらにあります

以前に記事でキューまわりの話を書いたのですが、作者さんから返事いただいた通り、

some.imageUrl
  .deliverOn(Queue.Background).map { (urlString) -> UIImage in
    // UIImageの取得処理はメインスレッド以外で行う
  }.deliverOn(Queue.Main).bindTo(cell.avatarImageView.bnd_image)

こんな感じで書いて正しく動きました。感謝です。
内部の実装とかはまだ全然見れてないので、そちらもちゃんと見ておこうと思います

追記(2015/10/29) - 双方向バインディングについて

双方向バインディングは以下のように書く(これまで<->>と書いてたもの)

self.someData.name.bidirectionalBindTo(self.hogeTextField.bnd_text)

そういえばどう書くんだろうと思って追記・・・

17
15
0

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
17
15