-
Swiftの文字列の置換にFunctional in Swiftの手法を取り入れてみる
Monday, March 14, 2016
また雨が降って急激に冷え込んできましたね。。月曜日からこれだと体がもたない… 最近、「Functional in Swift」を買うか買わないか迷ってて購入画面を行ったり来たりしています。 寧ろ「Advanced Swift」の方が欲しかったり。。 それで、「Functional in Swift」で、(おそらくCIFilterの)処理をFunctionalに書いているコードが、購入ページでちらっと見えたので、 練習がてら、違うAPIを例に関数型プログラミングっぽく書く練習をしました。 長く読みたくない人のために、先にGistを貼っておきます。 Gist …
-
UIScrollViewで常にBouncesを有効にする
Friday, March 11, 2016
小ネタを。 通常、UIScrollView(UITableView,UICollectionView)は、 frame.size < contentSize になる時に、縦もしくは横方向にスクロールができるようになり、bouncesプロパティが有効だと端に来た時にバウンスするようになります。 しかし、frame.size > contentSize の時は、バウンスしません。 ですが、あるプロパティにtrueをセットすると、 contentSize が frame.size より小さくてもバウンスするようになります。 …
-
file_pathの扱いを楽にするFilePathConvertibleを作った
Wednesday, March 9, 2016
最近 try! RxSwiftしてとことんクラッシュしています。どうもです。 そろそろ、ストアに出すかどうかは一旦置いといて、真面目に自作アプリを作ろうと決心し、 使いたかったライブラリを使ってテストプロジェクトで遊び、何のライブラリを使うか決めて動き出しました。 その中で、EZSwiftExtensionsみたいに、ある程度使いやすい単位でまとめたextensionとかをまとめたライブラリを作ろうということで、SUSwiftSugarの整備をしています。 その時に、file_path を扱う時に、StringでもNSURLでも許容できるものをと思って、FilePathConvertibleを作ってみました。 …
-
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のプレゼンを見て、気づいたことがあったのでそれを書き留めておこうかなと。 …
-
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しようと思うとちょっと困ったことがあります。 …
-
protocolを使って冗長的な関数のオーバーロードを減らす
Monday, February 22, 2016
タイトルが少し難しそうに聞こえますが、内容は割と簡単です。 たまたま、自分用に書いているSwiftのextensionsを整理していた時に、「あ、こうした方がいいんじゃないかな」って思ったので、それを試したまとめになります。 …
-
try?のうまい使い方
Sunday, February 21, 2016
Swift2.0からエラーハンドリングが追加され、tryを使えるようになりました。 また、Xcode7 beta6(あたり?)から、try、try!に加えtry?が追加されました。 これにより、柔軟にtryを使えるようになります。 …