-
NSLocaleにextensionを追加してtypoを防ぐ
Monday, March 7, 2016
NSDateFormatter等に特定のlocaleを指定したい場合に、 let formatter = NSDateFormatter() formatter.locale = NSLocale(localeIdentifier: "en_US") みたいにして、(この例だと “en_US” を)指定しますが、この時、文字列で指定するのがなんとなく嫌というか…。 前に、“en_US"ではなくて、 “enUS” みたいにしてしまった事があったので、その教訓も踏まえて、次のようにextensionを書いてみました。 …
-
class protocolってなんぞ
Sunday, March 6, 2016
最近はGithubでお世話になっているライブラリのコードリーディングをしたりして、 どのように実装されているかとか、どういう書き方やジェネリクスの使い方してるか、とか学んでいます。 その中で、興味深いものを見つけたので、書き留めておきます。 …
-
Optionalとmapとfunction
Sunday, March 6, 2016
1日1記事とかに拘らず、なるべく1日1記事は最低書くとして、他書きたい内容ができてきたら追加で記事を書いている、そんな感じです。 今日は最近自分がtry! Swiftのプレゼンを見て、気づいたことがあったのでそれを書き留めておこうかなと。 …
-
Blending Cultureのサンプルを拡張してみた
Sunday, March 6, 2016
Qiitaで先日、こんな記事を書いて、try! Swiftで発表されてたプレゼンのサンプルを描き起こしたのですが、 try! Swift 1日目 “Blending Cultures"の内容をサンプルアプリに起こしてみた Blending Cultures Example あれから、色々と自分なりにあれこれ追加したものをアップしてみました。 …
-
`git remote add upstream`を楽にする
Friday, March 4, 2016
最近他の方のリポジトリをforkして、remoteにoriginとは別に upstream としてfork元のリポジトリをセットすることが多く、 git remote add upstream git@github.com:<fork元user/fork元リポジトリ> みたいに追加することが多いのですが、毎回これを打つのが面倒だったので、 “自分のuser名/リポジトリ名” だけで、 upstream を設定するスクリプトを書いてみました。 …
-
ReactiveXの処理が図で分かる「RxMarbles」
Friday, March 4, 2016
Twitterでフォローさせて頂いている人のつぶやきで知ったのですが、ReactiveX(RxSwift)の、 map, flatMap, cancat などといった関数の使い方と、それが図で見れるアプリを知ったのでそのアプリの紹介をしてみようと思います。 AnjLab「RxMarbles」 …
-
try! Swift2日目でrx_reachedBottomが気になったので作ってみた
Thursday, March 3, 2016
相変わらず、有志の方が書き起こしてくださっているブログやハッシュタグから情報を取り寄せています。どうも。 その中で、 ishkawa さんが発表したスライドの中に、rx_reachedBottomなるものが出てきて、調べてみたらどうやらRxSwiftで用意されているものじゃなかったっぽいので、予想して書いてみました。 執筆時点ではまだサンプルコードが公開されていないので、あくまでも予測なので、正式(?)なものが公開されたら追記します。 注意 ishkawaさんがサンプルプロジェクトを公開していたので確認したところ、 見事に 予想が外れたので、自分の駄作を残しつつ、追記します。 …
-
PDFGeneratorをv1.1.1にアップデートしました!
Sunday, February 28, 2016
先日の勉強会の間に、PDFGeneratorをv1.1.1にアップデートしました!という事後報告を。 こんなに継続して開発してるのは初めてですし、使ってくれてる人が居て、issue をくれる人がいるというのは、 本当に感謝しないとなあと思っています。 今回は1.1→1.1.1へのマイナーアップデートです。 何を修正したのか 今回は、 issue/13 の内容を修正した形になります。具体的には、 UITableView(おそらくUIScrollView,UICollectionViewでも)で、 contentInset が設定されていると、上手く描画されない (section headerとかの位置がinset分ズレたりする) といったものでした。最初普通にUITableViewControllerを作って試したものの再現できず、 contentOffset をいじっても再現できずで、 たまたま contentInset をいじったら再現が取れて、、と、再現までに時間がかかってしまいました>< どう修正したか UIScrollViewを描画する前に、一度 frame の originの値、 contentOffset の値を0にリセットをかけるので、それと併せて contentInset もリセットをかけるようにしました。 まずはこんな感じで、UIScrollViewにprivateな extension を用意して、、 private extension UIScrollView { typealias TempInfo = (frame: CGRect, offset: CGPoint, inset: UIEdgeInsets) var tempInfo: TempInfo { return (self.frame,self.contentOffset,self.contentInset) } func resetInfoForRender() { self.contentOffset = CGPointZero self.contentInset = UIEdgeInsetsZero self.frame = CGRect(origin: CGPointZero, size: self.…
-
enumの要素を配列で取得したい
Friday, February 26, 2016
enumの要素の数や、全ての要素を配列として受け取りたい時に、 enum SomeType { case A, B, C, D var cases: [SomeType] { return [.A, .B, .C, .D] } var count: Int { return cases.count } } みたいなことをしたくなかったので、なんとかprotocolとかでこのあたりうまーくやれないかなと思って四苦八苦した結果キレイにまとめられた(と個人的には思っている)ので、公開しておきます。 …
-
ErrorTypeを拡張してより使いやすく
Friday, February 26, 2016
Swift2.0からErrorTypeが登場し、enum等に適応させることでエラーの種類を簡単に実装できるようになりました。 enum SomeErrors: ErrorType { case ErrorA case ErrorB case ErrorC(String) } func doSomething() throws { throw SomeErrors.ErrorA } //----- (A) do { try doSomething() } catch let error { print(error) } //------ (B) do { try doSomething() } catch SomeErrors.ErrorA { print("error!") } catch SomeErrors.ErrorC(let msg) { print("error! \(msg)") } といった感じでdo~try~catchでエラーをキャッチしたときにその内容をprintできたり(A)、パターンマッチで特定のエラーをキャッチする(B)が簡単に行なえます。 また、よくあるResult型などで失敗時にErrorTypeを突っ込むことができたりします。 (B)のようにパターンマッチで条件を分けたい場合だけなら問題ないのですが、(A)のようにエラーの内容をprintしようと思うとちょっと困ったことがあります。 …