Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

Swift2

RxSwiftでログイン画面のサンプル実装

ユーザー名とパスワードを規定の文字数以上入力するとログインボタンが有効になるViewControllerをRxSwiftを使って実装してみました。 SwiftBondしか使ったことなく初めてRxSwiftを使ってみた感想としては、RxSwiftのほうが似たようなものがたくさんあり学習…

WebP.frameworkの作成方法

libwebpをclone > git clone https://chromium.googlesource.com/webm/libwebp 最新のをcheckout > git checkout 0.4.4 iosbuild.shを実行 > iosbuild.sh iosbuild.shでautomakeがないとか怒られた場合は以下を入れる Command line tools > xcode-select --i…

Swiftでコマンドラインでカバレッジを取る方法

Objective-Cのときはgcov使ってUnitTestのカバレッジを取っていましたが、 Xcode7から(?)llvm-covが使えるようになったのでこれを使ってみます。 ドキュメントを見ると使い方としては結構単純で、 レポートを出力するには、以下のようにPROFILEとBINを与えて…

3D Touch Peak, Popの使い方

1. 3D Touchの発火元となるviewの登録 UIViewControllerのregisterForPreviewingWithDelegateというメソッドを使って、3D Touchに反応するViewと、3D Touchが発生した際にハンドリングするdelegateを登録します。 override func viewDidLoad() { super.viewD…

SwiftでUnitTest時に環境変数で分岐させる

テスト対象を@testable import XXXXを使ってimportした場合に、テスト対象のコードをテスト時だけ分岐させて特定の処理を行わないようにしたりしたい場合の対処方法です。 方法としては、環境変数がセットされているかどうかでテストかどうかを判定します。 …

Swift2 ドキュメントコメント

ドキュメントコメントを記載することで、Option + クリックでメソッドなどの説明を表示したりするようにすることができます。 ドキュメントコメントの指定方法は2通りあり、複数行の場合は/* ... /で囲い、一行の場合は///で始めます。 /** say message */ …

Swift Bond v4

Swift BondがSwift2.0に対応し、更にインターフェースが大きくかわりv4としてmasterに統合されました。 主な変更点としては、 クラス名を刷新 これまではBond、Dynamicといった意味不明なクラス名がObservable, EventProducerに変わりわかりやすくなりました…

Swift2でsubstring

Swift2(beta6以降)でadvance()が廃止され、BidirectionalIndexTypeなどにadvancedBy()が追加されたました。 書き方は以下の様に変わります Swift1.2 var text = "123456" text = text.substringFromIndex(advance(text.startIndex, 3)) // "456" Swift2 var …

Swift2でArrayにArrayをinsertする

これまではsplice:atIndexでしたが items.splice(insertItems, atIndex: items.endIndex) Swift2(beta6以降)からinsertContentsOf:atに変わりました items.insertContentsOf(insertItems, at: 1) 例 var items = ["a", "b", "c"] let insertItems = ["1", "2…

Swift2でStringを指定した文字で分割

beta5でsplitの仕様がちょっと変わり、以下のようにすることで文字列を分割できます。 let string1 = "hoge" let string2 = string1.characters.split("o").map{ String($0) } // [h, ge] Swift2からStringはCollectionTypeではなくなり、Stringの保持するch…

Swift2でのbitmask

Swift2からRawOptionSetTypeがOptionSetType (OptionSetType Protocol Reference) に変わったため、 例えばUIViewAutoresizingの場合、 これまでは view?.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight だっ…

SwiftでUnitTestするときに"Use of undeclared type"になる場合の対処法

テストを実行するとこういうエラーがでることがあると思います。 Use of undeclared type 'Todo' does not have a member named 'todo' import XCTest import TodoApp class TodoTests: XCTestCase { var todo: Todo! override func setUp() { super.setUp()…