-
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のプレゼンを見て、気づいたことがあったのでそれを書き留めておこうかなと。 …
-
Blending Cultureのサンプルを拡張してみた
Sunday, March 6, 2016
Qiitaで先日、こんな記事を書いて、try! Swiftで発表されてたプレゼンのサンプルを描き起こしたのですが、 try! Swift 1日目 “Blending Cultures"の内容をサンプルアプリに起こしてみた Blending Cultures Example あれから、色々と自分なりにあれこれ追加したものをアップしてみました。 …
-
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さんがサンプルプロジェクトを公開していたので確認したところ、 見事に 予想が外れたので、自分の駄作を残しつつ、追記します。 …
-
【書評】Swift+Core DataによるiOSアプリプログラミング
Monday, February 29, 2016
今回は、タイトルの通り、西方夏子さんが書かれた「Swift+Core DataによるiOSアプリプログラミング」を拝読させていただいた感想を書かせていただこうと思います。 はじめに 今回この記事を書くに至った経緯としましては、マイナビブックスさんにて、読者モニター募集のキャンペーンをやっていまして、 応募させて頂いた所、当選したとご連絡を頂き、本の出版日の前にモニターとしてPDFを頂きました。 モニターの条件として、SNS等で感想をシェアするということでしたので、このblogに感想を書かせていただき、自分のTwitter等で拡散させていただこうと思います。 以下、拙いですが、私が読んだ書評となります。 書評 書かれているのはCoreDataのことだけじゃない まず、この本では、単にCoreDataのことについてズラズラ書いているものではなく、 UIKitの基礎から、実際にCoreDataを使う例に至るまで、 はじめてCoreDataを扱う人、ある程度入門書等を読んだ駆け出しの開発者でも理解しやすい ように書かれています。 目次を抜粋しますと、 概論 UI開発の基礎 UIKitの機能と役割 UIKitとは ビュー ビューコントローラー イベントハンドリング (省略) といった感じで、初めからガシガシCoreDataの仕組みを書くぞ!って感じというよりは、初めての人でも、本を読み進んで、サンプルプロジェクトを見ながら書き進める時の前提知識が身につくようになっています。 また、後半では、Xcode7から登場したPlaygroundに関しても触れられており、CoreDataをPlayground上で動作させることに関しても書かれています。 更に、XCTestにも触れられているので、CoreDataを使った際のテストに関しても書き方が理解できるようになっています。 読み手のこともしっかり考えているんだなと思いました。 CoreDataの事をどれだけ網羅しているか CoreDataに関しては、はじめの概論から始まり、 基本的な使い方(永続ストアのセットアップ等) データモデルの定義方法 データの追加/削除やフェッチ 自動マイグレーションとマッピング エラーの検証とハンドリング FetchedResultsControllerの使い方 効率化としてライフライクルやフェッチの応用 並列処理 iCloudでの利用 といった形で、CoreDataの基礎から応用まで、 網羅 している感じです。 特に、実際のアプリ上では非同期でフェッチしてユーザーにストレスを与えずにデータを引き出す事が重要で、 それに伴うスレッドセーフなフェッチの仕方にも触れられているので、実践的なところまでカバーしているなと思いました。 サンプルアプリを交えて章が進んでいくので、実際に作りながら、CoreDataをどう使っていくのかも学べます。 また、あまり情報のない、CoreData側での保存時のバリデーションの方法や、iCloudでの利用も記載されていて、 自分にとっても新しい発見がありました。 いままでCoreDataで定義したEntityに入る値の検証はそれ専用のValidatorクラスを作ったりして行っていましたが、それをEnitityに持たせられるのは便利だなと思いました…! また、Swiftがベースですが、SwiftとObjective-Cで少し異なるような場面では丁寧に、Objective-Cでの場合も掲載されています。 開発環境のサポートに関して 本にも記載されていますが、 Swift 2.1 Xcode 7.…
-
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.…
-
第25回 iOS馬場 に参加してきました
Saturday, February 27, 2016
実は、こういった勉強会に参加するのは初めてでした。どうもです。 初めて参加させていただきましたが、もくもく会をベースにということで、みなさん各々もくもくとやったり、 雑談があったりと、勉強会は過ごさせていただき、その後の懇親会では、情報交換をしたりと、とても有意義な時間になりました! …