Go to Swift・iOSコラム
Swift・iOSコラム
Letter sent on Dec 11

Swiftレター #11

2016/12/11

ブラウザで見るとURL展開されて見やすいのでオススメです👀


Swift

Method Dispatch in Swift

Method Dispatch(Direct/Table/Message Dispatch)についての詳細かつ網羅的な解説です。ハマリどころや既存バグなども記載されています。パフォーマンスを意識した書き方にしたい際に役立つのはもちろん、メソッドオーバーライドがなぜか効かないなどで困った時にも役立つ内容となっています。

Optionals and String Interpolation

例えば、sがオプショナル文字列の時、“\(s)”のような書き方(String interpolation)をした際に、”Optional(“s文字列”)”のように意図せずOptional文字列などが付いてきてしまうミスを誘発する、という問題についてです。僕もたまにこのミスを犯してしまうので少し困っていました。

まず、Swift 3.1ではこの際警告が出るようになります🎉

この記事では、これらのことを冒頭で紹介しつつ、さらに踏み込んで???というカスタムオペレーターを用意してInt?型の変数がnilだった場合に代用文字列を指定出来るようにしたということが紹介されています。

個人的には、カスタムオペレーターなど用意せずとも、Swift 3.1のデフォルトの挙動だけで充分幸せになれそうです( ´・‿・`)

Guarding Against Long Compiles

Other Swift Flagsに -Xfrontend-warn-long-function-bodies=100 を指定すると、100ms以上ビルド時間のかかった箇所を警告として指摘してくれるテクニックの紹介です。RobertGummesson/BuildTimeAnalyzer-for-Xcodeはたまに使っていましたが、それ無しでこの指定だけで良いかなと思いました。個人的には、基本的にはビルド時間のことはまったく考えずに書きやすさ・読みやすさ重視で型推論なども多用しつつ、ビルド時間のボトルネックになっているところのみ仕方なく書き換える、というスタンスなので、このように警告で指摘してくれる方法はとてもしっくり来ました。5月のコミットでなされた対応(Xcode 8.0・Swift 3.0で対応?)だったようですが、今回初めて知りました。

As a frontend option, this is UNSUPPORTED and may be removed without notice at any future date.

コミットメッセージに、この記述があることに注意です。(これに限らずfrontend系のオプション全般に言えることだと思いますし、とりあえずあまり気にせずで良いと思いますが。)

Exploring Swift Memory Layout

普段あまり意識する必要も無いメモリレイアウトですが、いざというときにあまり資料が無かったりするので、貴重な記事です👀

MemoryLayout and Data in Swift3 — Qiitaも参考になります👀

Swift: UIView Animation Syntax Sugar

UIViewのanimateメソッドのcompletionをtrailing closureで書くとanimatinsクロージャーとの並び的に微妙で、かと言ってどちらもtrailing closure使わずに書くのも微妙ということで、簡単なAnimatorクラスを用意してメソッドチェーンで書けるようにした、という内容です。アニメーション系ライブラリは色々ありますが、そこまで凝ったことせずとも標準のメソッドを多少イケてる感じにする策として良いと思いました。ソースはこちらです。

サーバーサイドSwift

Building Microservices in Swift and Kitura: Part 1 of 3

ちょうど1年前にMicroservices with Swiftという記事にてFoundationレイヤーの欠損などを理由にまだ早いと述べられた @sheriffjackson さんが、そろそろSwiftによるマイクロサービス構築もありなのでは、と挑戦されている記事です。概ねうまくいっているようです。まだパート1のみの公開なので、今後の記事も楽しみです。ソースコードはこちらです。

Swift Evolution

[swift-build-dev] Try out new SwiftPM features!

12月7日以降のSnapshots版Swiftにて、SwiftPMの新しい機能をデフォルトで使えるようになりました。(それまでのSnapshots版では — enable-new-resolver指定が必要でしたが、デフォルトになりました。)

それぞれ対応Proposalは以下です:

iOS

Optimistic UIs in under 1000 words

通信など長い処理時間を要するものはプログレス表示で操作ブロックして待たせることも多いですが、”Optimistic”とはそれをせずに瞬時にUIを更新していき、結果的に運悪くエラーになってしまったら何かしらの手段でそれを伝えて復帰手段を用意する(致命的で無いものはスルーしたりもあり得る)、というものです。その際の表示パターンや、エラー時の対処法など紹介されています。

確かにこういうケアは出来るにこしたこと無いですが、けっこういい加減に採用しているアプリも多く、例えば変更操作したのにその後タイミングの差で早めに返ってきた変更反映前のレスポンスで上書きされてしまうなど、たまに体験します(Wunderlistなどで頻発)。そういういい加減な挙動になってしまうくらいなら、操作ブロックして確実に処理してほしいなと思います。

AsyncDisplayKit 2.0 Tutorial: Getting Started

facebook/AsyncDisplayKitのチュートリアルです。10,000スター超えているわりに周りで使っている声聞かないですが、活発に開発が続いていて12月8日には2.0がリリースされています。

標準UIKitでこと足りているうちはそれ使うことに越したこと無いと思ってしまうので、個人的にはなかなかサンプル動かす以上のことをする動機が無いですね🤔

Xcode

My Favorite Xcode 8 Shortcuts (Part 1/3)

ちょくちょく使いこなせていないショートカットがあって、参考になりました。すべてgif動画活用するなどして分かりやすく解説されていて良いです。

リリース

Apple系のリリース

macOS Sierra 10.12.2 beta 5からApple File System(APFS)のプレリリース版が含まれているようです👀

Apple系のニュース

App Store Best of 2016

年末恒例のApp Store Best of 2016が発表されました。

ちなみに、Google Playの「ベスト オブ 2016」はこちらです。

その他のニュース

Amazon GO

レジ精算無しで買い物出来るシステムということで、すごいですね( ´・‿・`)2017年初めというかなり早いタイミングでの正式開店予定みたいですが、多分アメリカから順次という感じだと思うので、いつか日本上陸するのを楽しみにしてます( ´・‿・`)

Amazon Dash Button

2015年にリリースされたAmazon Dash Buttonが日本にも展開されました。

500円で購入出来、さらに本来の利用以外に簡単にカスタマイズ応用可能ということで、そっち方面でけっこう流行っている気がします( ´・‿・`)僕も1つ買いましたが、どう使うか考え中です🤔

Affinity Photo 1.5リリース

写真加工系デザインツールのAffinity Photoの1.5がリリースされて、このバージョンからWindows対応もされました。

紹介動画観ても、かなり本格的なツールであることが分かりますが、それが$39.99(通常は$49.99)買い切りですごいです( ´・‿・`)
ベクター系デザインツールのAffinity Designerもあります(というよりこちらが先)。

筆者の小話

昨夜、人喰いの大鷲トリコをクリアしました🎉トリコかわいいし、面白かったです( ´・‿・`)トリコの動き・仕草が気まぐれで、本当に生き物ぽくてすごかったです🐶


バックナンバーはこちらから一覧出来ます。

↓アカウントやSwift・iOSコラムPublicationフォローしていただけるとありがたいです🙇 PublicationフォローしていただけるとこのSwiftレターのメール通知も届くようになります( ´・‿・`)