ライブラリなしでメディアアプリでよく見る無限スクロールするタブの動きを実装したUIサンプルの紹介
1. はじめに 皆様お疲れ様です。Swift AdventCalendarの2日目を担当させて頂きます、fumiyasac(Fumiya Sakai)と申します。何卒よろしくお願い致します。...
View ArticleSwiftのGenericsとProtocolの実装
SwiftのGenericsとProtocolの実装について簡潔に解説する。 Apple Swift version 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1) Target: x86_64-apple-darwin18.2.0 ジェネリックな型の実行時表現 下記のtake関数のX型のように、ジェネリックな型があるとする。 func...
View ArticleSwiftのOptionalを理解する
iOSアプリケーション開発を主な業務としているが、チームの都合でObjective-Cを選択している。そんなSwiftに不慣れな自分にとって厄介なのはOptional。色んな場面で様々な形式で出てくるため混乱する。そこで自分自身がOptionalを習得するため、自分が見つけられたOptional関連のコードを飼料化してみた。 無...
View ArticleBetter Swift
Better Swift Swift Advent Calendar 2018 の 5 日目です。 折角の機会なので普段自分がよりよい Swift を書くためにやっていることを振り返って、まとめてみようと思います。 無意識にやっていることも多いと思うので、言語化できたら追記していきます。 ※ iOS に依存した内容も少し含まれてますが、ご了承ください。 ※ サンプルコードは Swift 4.2...
View ArticleRxSwiftとReSwiftで実装するMVVM+Reduxアーキテクチャ
現在開発中の個人アプリにRxSwiftとReSwiftを使ったMVVM+Reduxアーキテクチャを採用しています。 「MVVM+Reduxアーキテクチャ」といっても、特に新しいアーキテクチャを考えたわけではなく、MVVMとReduxを組み合わせてアプリを実装しているということです。 MVVMとReduxは解決しようとしている課題が異なるため、併用することが可能です。...
View Article1週間でアプリのパフォーマンスを5倍に改善した話
Swift Advent Calendar 2018 の 7 日目です。 先日開発中のアプリのプロトタイプを完成させ、自信満々に仲間に見せたところ 「動いてるけど動作重いね、、」 と言われショックで2日間放心状態に陥りました。 しかし!そこから1週間集中的にパフォーマンス改善に取り組み 起動時間を大幅に改善することに成功しました。...
View ArticleSwiftでコマンドラインツール作成の誘い
Swift Advent Calendar 2018 の 8 日目です。 はじめに Swiftの話題としてはやはりiOSアプリ開発に関わるものが多いかと思います。 ですがもっといろん場面で活用されればいいなと思い、ここでは手軽にCLIツールを作る方法を紹介します。 と思って、Qiitaで検索したら既にSwift Package Manager (SwiftPM) で作るコマンドラインツール -...
View ArticleSwift 5 のResultに備える
Swift の機能提案は Swift Evolution で行われるのですが、 Swift の標準ライブラリに Result 型を追加するプロポーザル SE-0235 が承認されました。その結果、 Swift 5 で Result が標準ライブラリに追加されます。 本投稿では Result とは何か いつ Result を使うべきか Result をどのように扱うべきか 今のうちに Result...
View ArticleARCの光と影
メモリ管理方法 SwiftはARC(Automatic Reference Counting / 自動参照カウント)というメモリの管理方式を採用しています。 一方で、JavaやKotlin・C#といった言語はメモリ管理の方式としてGC(Garbage Collection / ガベージコレクション) 1 を採用してます。...
View ArticleCore Animation周りをタイプセーフに扱えるようにする
はじめに UIKitでサポートされていないアニメーションをしたい場合、Core Animationを使うことになると思います。 例えば、以下のように四角から丸に変化するアニメーションです。 CABasicAnimationでアニメーションさせる...
View ArticleSwiftの数値リテラルをチョットダケ詳しく調べた話
こんにちは、freddiと申します。Swiftを始めて8ヶ月少々、最近は周囲の影響からかSwiftコンパイラやSILについてちょっと勉強し始めています。 この記事は、「Swift Advent Calendar 2018」の14日目の記事として、Swiftの数値リテラルを、基本的なところから、普段のSwiftコードよりもちょっと低いレイヤーを覗いたり、実際に触れ合って見た話をします。...
View ArticleSwift Type metadata
Swiftには実行時に型情報を保持するためのType metadataという仕組みがあります。我々が頻繁に使うことはありませんが、Swiftのランタイムの動作を理解するための重要な要素です。 この記事では Type metadata についてコンパイラのコードとドキュメントから調べたことを簡単に解説します。 Type metadata とは...
View ArticleSwiftにおけるコードの書き方や表現方法の考察
はじめに Swift Advent Calendar 2018 の 16 日目です。 AdventCalendar初参加させていただきます。 @tattnさんのBetter Swiftと少し趣旨が被っているなと感じていますが そこはご了承いただけますと幸いです。 (月初には9割方書いており、テーマを変更する余裕がありませんでした) 今回の内容の動機...
View ArticleSwift Language Guideの全章の見出しの和訳
はじめに Swift Advent Calendar 2018、17日目担当の@shtnkgmです。 Swiftスキルを上げるために、公式のSwift Language Guideの全章の見出しを翻訳してみました。 Swiftに関する体系的な内容がキーワードとしてまとまっていますので、知らないものがないかチェックするのに活用いただけるかと思います。...
View Articleワンランク上のSwiftを書くための厳選記法10選
はじめに Swift Advent Calendar 2018の20日目を担当させていただきます @ruwatana です。 主流となっているモダンな言語は多様な概念を採用しており、さまざまな記法を使って十人十色のコードを書くことが可能となっています。...
View Article【考察】なぜ Swift に `popLast()` があって `popFirst()` がないのか
さらにいうと、なぜ Swift に remove は removeFirst() も removeLast() もあるのに、pop は popLast() しかなく、popFirst() がないのか。 ※本記事はあくまで個人的な考察であり、公式見解ではありません。 実は今日 Slack で @bannzai さんからこんな質問をいただきました: Array に popFirst...
View ArticleConditional Conformanceで遊ぼう
Conditional ConformanceはSwift4.1で追加された言語機能です。 型パラメータに条件をつけて(Conditional)他のProtocolに適合する(Conformance)ことができる便利な機能です。 class Box<T> { var value: T init(_ value: T) { self.value = value } }...
View Article