SwiftでStoryboardとXibをシンプルに呼び出す
StoryboardとXibの呼び出し方が面倒
コードからStoryboardやXibを呼びだそうとすると以下のような煩わしい書き方になります。
// load view from xib let sampleView = UINib(nibName: "SampleView", bundle: nil).instantiateWithOwner(self, options: nil)[0] as! SampleView // load view controlelr from storyboard let storyboard = UIStoryboard(name: "Sample", bundle: nil) let sampleViewController = storyboard.instantiateViewControllerWithIdentifier("SampleViewController") as! SampleViewController
まず何が煩わしいかというと、長ったらしくて覚えてられんということ。そしてas!で強制アンラップしているので、Swift的にあまりよろしくありません。as?にしてif let, guard let elseで書くのもありですが、毎回書くのは面倒です。
SwiftでNSDateを直感的に比較する
NSDateの比較
下記のようにしてNSDateの比較ができます。
d1.compare(d2) == .OrderedDescending
compareというメソッドを使い、その結果が.OrderedSame、.OrderedDescending、.OrderedAscendingのどれに一致しているかを見て判断。いまいち直感的でない比較でよく混乱します。
<, >, == で比較できるようにする
下記のように「<」「>」「==」を拡張すると、直感的に比較ができるようになります。
func == (d1:NSDate, d2:NSDate) -> Bool { return d1.compare(d2) == .OrderedSame } func > (d1:NSDate, d2:NSDate) -> Bool { return d1.compare(d2) == .OrderedDescending } func < (d1:NSDate, d2:NSDate) -> Bool { return d1.compare(d2) == .OrderedAscending } func <= (d1:NSDate, d2:NSDate) -> Bool { return d1 < d2 || d1 == d2 } func >= (d1:NSDate, d2:NSDate) -> Bool { return d1 > d2 || d1 == d2 }
使い方はこんなかんじ。
let now = NSDate() let tomorrow = NSDate(timeIntervalSinceNow: 60 * 60 * 24) let yesterday = NSDate(timeIntervalSinceNow: -60 * 60 * 24) if now < tomorrow { print(true) } if yesterday <= now { print(true) }
普通の文字列比較のように、右辺と左辺にNSDateのオブジェクトを指定してやればOK。ぱっと見ただけでどういう条件かも分かりやすくて便利かと。
UIScrollView.contentOffsetの謎
UIScrollView.contentOffset
UIKitに含まれるUIScrollViewのプロパティ「contentOffset」。
public class UIScrollView : UIView, NSCoding { public var contentOffset: CGPoint // default CGPointZero
contentOffsetはどれだけスクロールしたかを表します。型はCGPoint。
contentOffsetの値はまるめられる
もしかしたら常識なのかもしれないですが、最近デバッグしてて気付きました。結論は、contentOffsetの値はまるめられるということ。
contentOffsetは1.0ずつ更新されます。ただし、addSubViewされていると0.5ずつ更新されます。
iOSアプリ開発におけるイースターエッグのすすめ
はじめに
この記事はiOS Advent Calendar 2015 - Qiita 19日目の記事です。
昨日はhachinobuさんのMVVMっぽい構成のデモアプリを公開してみるでした。
本日はイースターエッグについて。
イースターエッグとは簡単にいうと隠し機能のことです。余裕のある開発者が仕込んだ粋なお遊びですね。
発見したときはついつい友達に教えたくなります。イースターエッグが仕込まれているアプリおよび実装例について紹介しますね。
iOS9対応でやろうと思っていることまとめ
iOS9がそろそろでます
iOS9が今月半ばに登場するので、それに向けてiOS9対応をする必要があります。
例年の通りだと、来年にはiOS9SDKでビルドしていないものは審査すら出せなくなります。
iOS8対応済みのアプリに対してiOS9対応する際にやろうと思っていることを以下にまとめました。
他にもこれやっといたほうがいいよっていうのがあれば教えて下さい。
iOSアプリの64bit対応でやったことまとめ
2015年06月より64bit対応必須に
そういえば今月から64bit対応が必須になりました。アプリ申請時に64bit対応していないと自動的にはじかれます。64bit対応なんてすぐ終わるやーと思っていたんですが、なんだかんだ2週間くらいかかってしまいました…。やったことをまとめます。