-
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しようと思うとちょっと困ったことがあります。 …
-
IBMとSwiftと私
Tuesday, February 23, 2016
日本時間23日未明に、IBM社がSwiftをクラウド対応したのと、Kituraというwebフレームワークを公開したことで話題になっています。 参考: [速報]IBMとアップル、プログラミング言語「Swift」をクラウド対応に。Bluemix上にSwiftランタイム、Webフレームワーク「Kitura」などを提供 更に、「IBM Swift Package Catalog」も用意したみたいで、 Swift Package Manager 対応しているライブラリがあれこれ掲載されています。 …
-
protocolを使って冗長的な関数のオーバーロードを減らす
Monday, February 22, 2016
タイトルが少し難しそうに聞こえますが、内容は割と簡単です。 たまたま、自分用に書いているSwiftのextensionsを整理していた時に、「あ、こうした方がいいんじゃないかな」って思ったので、それを試したまとめになります。 …
-
try?のうまい使い方
Sunday, February 21, 2016
Swift2.0からエラーハンドリングが追加され、tryを使えるようになりました。 また、Xcode7 beta6(あたり?)から、try、try!に加えtry?が追加されました。 これにより、柔軟にtryを使えるようになります。 …
-
キーボードの「次へ」を押して、次のTextField,TextViewに移動する処理を簡単にしたFormChangeableを作ってみた
Saturday, February 20, 2016
ずっと構想はあったものの、うまく形にできずに早2ヶ月経ってしまったのですが、ようやく形にできたので公開してみます。 sgr-ksmt/FormChangeable …
-
NSLocale.preferredLanguages()を使わずに、端末の使用言語が日本語かどうかを判定する
Tuesday, February 16, 2016
寝る前に少しtry! Swift Conference Appのソースをみて寝ようと思ったら、 今までみたことがなかった判定の仕方で、使用言語が日本語かどうか判定をしていたので、なるほどな〜って思って見入ってしまいました。 …
-
SwiftでClosureを即時実行するtips
Monday, February 15, 2016
暖かかった日が過ぎてまた寒くなったせいで体がなんだかだるいですね。。 今日はよく自分が使うちょっとした小ネタを一つ。 …
-
EnhancedAutoreleasePoolを作成しました。
Sunday, February 14, 2016
以前記事にしたautoreleasepoolから例外を投げられるようにするを更に使いやすい形にして、 sgr-ksmt/EnhancedAutoreleasePool として公開しました! 前回紹介したtryが可能になるものに加えて、autoreleasepool()内で値を返すことができようにし、更にtry可能なautoreleasepool()も準備しました。 定義としてはこんな感じです。 public func autoreleasepool(@noescape code: () throws -> ()) rethrows public func autoreleasepool<V>(@noescape code: () throws -> V?) rethrows -> V? public func autoreleasepool<V>(@noescape code: () throws -> V) rethrows -> V これで、以下の様な書き方もできます。 let value = autoreleasepool { doHighPressureMemoryTask() return "value" } autoreleasepool()の機能により局所的にメモリの圧迫を抑えつつ、必要な値を返戻することができます。 次回あたりに、あまり詳しく解説されているところがないので、throwsとrethrowsの違いでもまとめてみることにします。
-
UIBarButtonItemで隠されたボタンを使用する
Sunday, February 14, 2016
UIBarButtonItemには、typeを指定して、標準で用意されている様々なアイコンを使用できます。 (ここに一覧が掲載されています。) しかし、 < > ∧ ∨や、ゴミ箱アイコンといったものが用意されていません。 これを毎回画像で用意するのはしんどいし、"< >"と文字で生成するとなんかダサいし。。 ただ、標準アプリであるSafariとか、UINavigationBarの戻るボタン等、標準で< >を使っているのでなんとかして使えるなら使いたい。 それを解決してみます。 enum UIBarButtonHiddenItem: Int { case Previous = 101 case Next = 102 case Up = 103 case Down = 104 case Locate = 100 case Trash = 110 func convert() -> UIBarButtonSystemItem { return UIBarButtonSystemItem(rawValue: self.rawValue)! } } extension UIBarButtonItem { convenience init(barButtonHiddenItem item:UIBarButtonHiddenItem, target: AnyObject?, action: Selector) { self.init(barButtonSystemItem: item.convert(), target:target, action: action) } } このようにして、UIBarButtonHiddenItemを定義して、UIBarButtonSystemItemとのブリッジを作成します。…