積読消化1 さわって、学べる!iOSテスト駆動開発
TDDとは
まさにこの図!!
- Red → これから実装する機能に対する失敗するテスト
- Green → 失敗したコードを成功させるための最低限の実装コードを書く
- Refactor → 外部から見たときに動作を変えずに実装コードを洗練する
目的
動作する綺麗なコードを書くため!
テストの種類
サンプルアプリをやる際の注意
- window関係は今はAppdelegate.swiftに書かず、Scenedelegate.swiftに書く
テストもしっかりターゲットに入れてあげる
やり方
Xcodeの右サイドバーだして、ファイルを開いてる時にビルドターゲットのセレクトボックスがあると思うので、そこでアプリケーションにチェック入ってなければチェック入れてもう一回やってみるとか
- コードの説明
let window = UIWindow() window.makeKeyAndVisible()
なにをやっているのか
レシーバのUIWindow
を key window とし、かつ同一の level にあるウィンドウの中で最も前面に表示してくれるメソッドということがわかります。key window というのはアプリに同時に1つまで存在できる、タッチ操作に関係しないイベントを受け取るウィンドウの事のようです(タッチ操作イベントはそれが起こったウィンドウに送られます)。level というのはウィンドウの前後関係を示す Z 軸座標を表しています。
詳細はわかりませんが、makeKeyAndVisible()
はあくまでレシーバを key window とし、(level が同じまたはそれ以下のウィンドウの中で)優先表示するもので、どこかから新たに参照を持たれないことになんとなく納得しました。
AutoLayoutをコードでやる際のtips
NSLayoutConstraintのisActive
NSLayoutConstraint
のプロパティのisActive
を使います。例を示します。
let widthConstraint = aView.widthAnchor.constraint(equalToConstant: 100) widthConstraint.isActive = true // aView.widthAnchor.constraint(equalToConstant: 100).isActive = ture でもOK
ここで再び以下の画像を考えてみます。viewBとviewCはviewAのsubviewです。
isActive
を使うとviewBとviewCの横幅が等しい制約を有効化する方法は以下のようになります。
let widthEqualConstraint = viewB.widthAnchor.constraint(equalTo: viewC.widthAnchor) widthEqualConstraint.isActive = true viewA.constraints.contains(widthEqualConstraint) // => true
3行目に注目してください。widthEqualConstraint
がviewAに所属していることを示しています。このように、isActive
を使うとその制約がどのviewに所属するべきかを自動的に解決してくれます。制約を解除したいときはisActive = false
としてやればOKです。非常に便利ですね。