iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift

Swift の Collection Type Set について知ろう

Set とは? Swift の Collection Type の一つで、配列の順序が重要ではなく重複する値が無いような配列を作成したい場合に Array よりも便利に使用することができます。 また、格納する値は Hashable に準拠する必要があり、これにより様々な便利メソッドが…

CollectionView でページスクロールを作ろう

みなさん、最近 CollectionView は使っていますでしょうか?CollectionView っレイアウトの方法がいっぱいあってどれを使うべきか結構迷いますよね〜‍♀️ 今回はそんな CollectionView を使って、ページをめくるようにスクロールすることのできる UI を作って…

Swift で正規表現

みなさん Swift で正規表現使ったことありますか?僕は、iOSアプリ開発はじめたての頃、よく分からずググりまくっていました 今回は、そんな少しとっつきづらい正規表現を改めてまとめることで、再理解しちゃおうぜ!という記事です 正規表現とは? 文字列の…

iOS14 の PhotoLibrary アクセス API を更新する

今回は iOS14 での PhotoLibrary 周りの更新を簡単にまとめます。主なアップデートは Limited Photos Library と、Photos Library access level の二つです。 Limited Photos Library Limited Photos Library はその名の通り、アプリにアクセスを許可する写…

Swift Standard Library とは?

Swift Standard Library は、モジュールのインポートが何もない状態でも動作する、Swift プログラムを作成するためにの基本的なシンボルの集まりです。また、Swift Standard Library は Swift で記述されていますが、他の Swift コードを構築するためのコア…

RxSwift で簡易インクリメンタルサーチ

個人で開発中のアプリで RxSwift を使用した簡易インクリメンタルサーチを実装したので、その方法を簡単にまとめたいと思います 作業していくっ‍ 今回行うインクリメンタルサーチの仕様は下記の通りで、入力した ID が使用可能かどうかを調べるためにこの機…

Swift の @autoclosure

今回は、Swift の @autoclosure アノテーションについて書いていこうと思います。 @autoclosure とは? @autoclosure アノテーションをつけてクロージャーを実装すると、呼び出し側で引数として渡した値をクロージャーとして扱うことのできる機能です。@auto…

Swift の Class と Struct で迷った時にみる記事

Swift を書いていると、Class を使うか Struct を使うか迷う時が結構あり、どちらを使うべきか悩んだ時に判断する指標となることを簡単にまとめていきたいと思います。 参照: https://blog.usejournal.com/swift-struct-or-class-how-to-choose-d22d987bac3d…

Swift5.3 つまみ食い【SE-0286編】

SE-0286 - Forward-scan matching for trailing closures SE-0279 "Multiple Trailing Closures" threaded the needle between getting the syntax we wanted for multiple trailing closures without breaking source compatibility. One aspect of that co…

Swift5.3 つまみ食い【SE-0279編】

SE-0269 - Multi-Pattern Catch Clauses Swift は開始以来、末尾のクロージャのラベルを省略できる Trailing closure という構文をサポートしてきました。 // Without trailing closure: UIView.animate(withDuration: 0.3, animations: { self.view.alpha =…

Swift5.3 つまみ食い【SE-0276編】

SE-0276 - Multi-Pattern Catch Clauses Currently, each catch clause in a do-catch statement may only contain a single pattern and where clause. This is inconsistent with the behavior of cases in switch statements, which provide similar func…

Swift5.3 つまみ食い【SE-0269編】

SE-0269 - Increase availability of implicit self in @escaping closures when reference cycles are unlikely to occur Modify the rule that all uses of self in escaping closures must be explicit by allowing for implicit uses of self in situati…

Swift5.3 つまみ食い【where clauses on contextually generic declarations編】

今日から少しの間、開発作業が多くなりブログにまとまった時間が取れそうにないので、1日1Tips にもっとも良さそうな Swift5.3 の変更点を書いて行こうかと思います‍ where clauses on contextually generic declarations This proposal aims to lift the re…

Swift(5.3) の Generic を学ぼう

今回は、Swift における Generic Programming について理解を含めようということで、Swift の公式ドキュメントを眺めがらメモした内容をまとめていきます。 docs.swift.org 目次 Why generics? Generic Functions Type Parameters Generic Type Type Constra…

Error: Illegal instruction: 4 (in target '' from project '') の対処法

今回は、Xcode11.7 から Xcode12.0.1(GM) への移行中に発生した、タイトルのエラーで原因だったポイントと、改善方法を簡単にまとめます。なお、error: Illegal instruction: 4 は SwiftCompiler ではなく、OS によって出力されている Error のようですので…

iOS14 Widget Configuration まとめ2

今回は、前回の Widget Configuration まとめ Part1 に続き、後半の内容をまとめていきたいと思います。 developer.apple.com 目次 Widget Configuration UI のタイトルや内容背景の色などをカスタマイズする方法について Widget System Intelligence につい…

Swiftコンパイラ超入門

今回は、Swiftから LLVM IR に変換する際に使用される Swift Compiler について簡単にまとめてみようかと思います。 ここら辺の低レイヤーの部分は今まではあまり触っていませんでしたが、知識として持っておくことで、Xcode が暗黙的に行っている作業が理解…

PHAuthorizationStatus の .limited とは?

Xcode12 の対応に伴って、新しく出た warnings を修正しようとしていると、PHAuthorizationStatus 周りで何やら Switch must be exhaustive という warning が発生していました。 全てのケース網羅してるはずだけどな〜と思い、PHAuthorizationStatus のソー…

NSDataDetector を使う際に少し気を付けるところ

今回は、NSDataDetector を使って特定の文字列を抽出する時に少しハマったポイントを紹介したいと思います。 ハマりポイント いつもの如く NSDataDetector を使用して、文字列の中に存在するリンクを下記のように取得していると、意図しない場所でリンクがき…

ABI Stability とは?

今回は、Swift5.0・Swift5.1 でそれぞれ対応された、ABI Stability と Module Stability について簡単にまとめてめてみたいと思います。 ABI Stability とは? ABI Stability は異なるバージョンのコンパイラから生成されたバイナリ同士をリンクできるように…

Attributes Inspector でカスタムプロパティを指定できるようにする

今回は、Storyboard や xib などの Interface Builder を使ってレイアウトを設計する際などに知っておくと少し便利な、@IBDesignable・@IBInspectable について簡単にまとめていこうかと思います。 @IBDesignable とは? Storyboard や xib などの Interface…

Bridging Header vs Module Map

今回は昨日の import と Link の記事に引き続き、Bridging Header や Module Map について簡単にまとめていきたいと思います。 Bridging Header Bridging Header は Objective-C で書かれたコードを Swift で利用する仕組みで、それぞれの Objective-C 製ラ…

ライブラリの import と link について理解する

今回は iOS 開発における Library および Framework のインポートおよび、リンクの仕組みについて学んだことをまとめていきたいと思います。 これらのことを学ぶことで、今まで Xcode が暗黙的に行っていた処理がどのようになっているのかが分かり、ライブラ…

Static Library vs Dynamic Library

今回は、Swift で使用されるライブラリの形式について調べたことをまとめていきたいと思います。 ライブラリの種類 今回は、ライブラリという言葉で Framework と Library をまとめていますが、両者には違いがあるのでご注意ください。それでは、それぞれの…

Swift で文字列に含まれている URL を抽出しよう

今回は、Swift で文字列に含まれている URL を抽出する方法を簡単にまとめていこかと思います 結論 下記のように NSDataDetector というクラスを使用して、テキストからリンクを抽出することができます。 func getLinkTextList(text: String) -> [String] { …

iOS アプリのライフサイクルを理解しよう

今回は iOS アプリがどのようなライフサイクルで動いているのかを簡単にまとめて行きたいと思います。なんとなくボヤッとした感じでライフサイクルを認識していた人はぜひ目を通してみてください アプリの状態 状態 内容 Not running アプリは開始されていま…

iOSDC2020 の1日目振り返り

今日も前夜の記事に続きiOSDC2020のセッションを聞けた範囲でおもしろかったもののまとめをしておこうと思います。 ※ よかったら毎日ブログ書いてるので、暇な時に見てください yamato8010.hatenablog.com 4年間運用されて表示速度が低下した詳細画面を改善…

RxSwift(RxCocoa) における Subject・Relay を理解する

今回は RxSwift(RxCocoa) でたびたび使用する Subject・Relay の違いや Observable との違いについて簡単にまとめようと思います。また、Trait などはまた別の記事で触れようかと思います。 Subject・Relay とは? これらのクラスはイベントの検知もできます…

Unknown class 〇〇 in Interface Builder file. の対処法

今回は、CocoaPods や Carthage などでインストールしたライブラリなどを Storyboard・xib などで使用する場合に時々発生する。[Storyboard] Unknown class 〇〇 in Interface Builder file. の対処法を残しておこうかと思います。 原因・解決法 今回のケー…

UIView の updateConstraints() について知る

今回は View の制約を更新する際などに登場する updateConstraints() について簡単にまとめていきます なんのメソッド? このメソッドはUIView のインスタンスメソッドで、View の制約を更新する際に呼び出します。基本的にはシステム側がレイアウトパフォー…