iOSエンジニアのつぶやき

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

Swift

Swiftで単色のUIImageを生成する

本日はSwiftの小ネタです👷‍♀️ 結論 下記のようにして、単色のUIImageを取得することができます。UIGraphicsBeginImageContext()は、GraphicsContextを作成してスタックにプッシュします。次に、プッシュされたコンテキストをUIGraphicsGetCurrentContext()で…

【Swift】reloadDataの完了後に処理を行う

本日は誰もが通るであろうUITableView/UICollectionViewの小ネタです‍♀️ 結論 UITableView/UICollectionViewのreloadData()のcompletionHandlerは公式でAPIが公開されていないので、UIView.animateを使うことでreloadData()の完了後に処理を書くことができま…

【Swift】translatesAutoresizingMaskIntoConstraintsって結局なんなんだっけ?

SwiftのコードベースでAutoLayoutを設定する時によくやるこれ。 view.translatesAutoresizingMaskIntoConstraints = false view.widthAnchor.constraint(equalToConstant: 18).isActive = true view.heightAnchor.constraint(equalToConstant: 18).isActive …

【Swift】配列の順番を保証しながら重複を除く

先日Zennを眺めていたら、面白そうな記事を見かけたので、備忘録的に残しておきます zenn.dev 結論 Swiftの配列で要素の重複を取り除く方法として、Setがありました。 Set(arrayLiteral: "a", "a", "b", "c") // ["b", "c", "a"] しかし、Setは基本的に配列…

【Swift】文字列からSelectorを生成する

結論 NSSelectorFromStringを使うことで、下記のように文字列からSelectorを生成することができるようですね let selector = NSSelectorFromString("delete:") ちなみに今回は、UICollectionViewのcollectionView(_:canPerformAction:forItemAt:withSender:)…

【Swift】タップスルーなViewを作成する

このViewのタップイベントをスルーして、背面にあるViewをタップできるようにしたいという場面は、たまに遭遇するかと思います。今回はそんな場面で使えるSwiftの小ネタについて書こうかと思います‍♀️ 結論 hitTest(_:with:)で受け取ったイベントが自分自身…

【Swift】Error protocol からエラーコードを取得する

本日もSwiftの小ネタです‍♀️ 結論 SwiftのErrorプロトコルは、codeプロパティを持たないので、下記のようにNSErrorに変換することでcodeを取得するようにします。 extension Error { var code: Int { return (self as NSError).code } } てな感じで本日も以…

【Swift】TableViewで空のCellを表示しない

本日は初学者向けの内容で、UITableViewで空のCellを表示させないための簡易的な処理を紹介したいと思います‍♀️ よくあるこれです。 結論 tableFooterViewプロパティに空のUIView()をセットすれことで、空のCellが表示されないようになります。 tableView.ta…

【Algolia】インデックスを日付でソートする

本日はAlgoliaのインデックスを日付でソートする方法を簡単に紹介していきたいと思います👷‍♀️ それではやっていく インデックスをソートするにあたり、まず大前提として知っておくべきことが二点ほどあります。一つ目は、インデックス毎に一つのランキング式…

【Swift】ClosureのCapture List再入門

Capture Listとは? キャプチャリストは、よくClosure内で強参照によるインスタンスを保持を防ぐ下記のようなもので、Closure内で、ある値のキャプチャ方法を指定する役割があります。 let hoge = {[weak self] in self.hoge() } キャプチャ方法 キャプチャ…

【Swift】ユーザにアプリのレビューリクエストをする

最近ユーザにアプリのレビューリクエストを行う対応をしたので、備忘録として残しておきます✍️ ちなみにこれ。 結論 iOS10.3以降はこれでできる。ちなみにこのリクエストダイアログは一年で3回までしか表示できないらしいので注意が必要。 import StoreKit S…

【Swift】makeKeyAndVisibleってなにしてるんだっけ?

結論 makeKeyAndVisible は、windowを key window として設定することで、同一レベル(もしくは同一レベル以下)の windowの最前面に表示するためのメソッドです。 ちなみにレベルには下記のようなものがあり、LevelはrawValueとしてCGFloat値を持ちます。 ext…

【Swift】optional プレフィックスについて

先日、下記の記事を見て 「optional プレフィックスってそうゆう役割だったのか!」ということを知ったので、メモしておきます✍️ qiita.com ということで、まずは Swift のドキュメントを見てみます。 You can define optional requirements for protocols. …

【Swift】数値を特定の桁数で表示したい

本日は秒速で終わるSwiftの小ネタです‍♀️ 結論 「5」を10桁で表示したい場合に、他の桁を「0」で埋めるサンプルが下記になります。 extension Int { func filled(digit: Int) -> String { return String(format: "%0\(digit)d", self) } } print(5.filled(di…

XCFrameworkとは?

最近巷で聞く XCFramework がなんなのかをよく理解していなかったので、超簡単に概要を調べました✍️ XCFramework とは? Xcode11からバイナリフレークワークの配信のために新たにサポートされた方法で、下記のようにAppleプラットフォームの様々なターゲット…

【iOS】キーチェーンの概要

「セキュアなデータをローカルに保存したい!」時によく使うiOSのキーチェーンについて、初学者向けに超ざっくりな概要を書きました。 キーチェーンとは? キーチェーンは機密性の高いユーザ情報などを iCloud 領域にセキュアに保存する仕組みのことです。ま…

【Swift】Assertのあれこれ

今回はSwiftにあるassert 系メソッドのあれこれを調べていきたいと思います‍♀️ そもそもassertionとは? プログラムの実行時に満たされるべき条件をチェックして、条件を満たしていない場合はプログラムを停止したり、エラーを吐いたりする仕組みのことを言…

【Swift】Compilation Mode とは?

今回もSwift コンパイラ周りの小ネタです‍♀️ Compilation Mode とは? Compilation Mode は、プロジェクト内のファイルを全てコンパイルするか、変更されたファイルのみをコンパイルするかをコンパイラに指示します。 Xcode では、下記のように Build Settin…

Swiftコンパイラの最適化レベル

今回はSwiftコンパイラのOptimization Level (最適化レベル)について調べる機会があったので、それらを簡単にまとめてみます‍ 結論 結論、Swiftコンパイラには下記のような最適化レベルがあります。 Level 内容 -Onone 開発時のデフォルトレベルで、最小限の…

【Swift】UIView.animate で連続したアニメーションをする際のコールバック地獄をどうにかしたい

今回は Swift の UIView.animate で連続したアニメーションを実行する際のコールバック地獄を解消する方法を紹介したいと思います 結論 今回の悩みを解消できる素晴らしい記事があったので、車輪の再発明はしません✨ qiita.com Swift の Variadic Parameters…

【Swift】iOSのクリップボードにテキストを設定するメモ

本日は iOS のクリップボードにテキストを設定する方法をメモ程度に残しておこうかと思います 結論 とりあえずテキストを代入したい時はこんな感じで設定ができます。 UIPasteboard.general.string = "hoge" UIImage を設定したい場合はこんな感じ。 UIPaste…

【Swift】UIWindowを使用してポップアップを表示する

今回は、iOSアプリでポップアップを表示する際に UIWindow を使ってグローバルに表示できるような実装を行ったので、そのメモを残しておきます‍♀️ やっていく とりあえず、ポップアップを表示するための Class は下記のようになります。AppDelegate なんかで…

【Swift】reduceってこんな書き方できるんだ

本日は Swift の reduce() に関する小ネタです‍ developer.apple.com 「配列の合計値を取得したい〜」って時、いつもこんな感じで reduce() を書いていました。 let list = [1, 2, 3, 4, 5] let sum = list.reduce(0, { $0 + $1 }) print(sum) // 15 実はこ…

【Swift】アクセスコントロールを学ぼう

本日はちょっと記事を書く時間が取れなかったので、初学者向けの内容で Swift のアクセスコントロールについて紹介します‍♂️ 一覧 結論 Swift には下記のようなアクセス修飾子があります。ちなみにアクセス修飾子を付けない場合はデフォルトで internal にな…

GoogleMap と Map で経路表示するときのメモ

Google Map と Map それぞれの Custom URL Scheme を使って経路表示をする実装をしたのでメモ程度に残しておきたいと思います 結論 ということで、それぞれの経路表示を Alert として落とし込んだメソッドが下記になります。 執筆時点では、下記のような URL…

【Swift】配列の全ての要素が条件に果てはまるかのチェックメモ

先日久しぶりに Zenn を眺めていたら、今まで使ったことのない便利な Array のメソッドの紹介記事を見つけたので、忘れないようにメモしておきます zenn.dev 例えば、配列の全ての要素がStringであるかどうかを調べる必要があった場合、今までは下記のように…

【Swift】Date から UNCalendarNotificationTrigger を生成するメモ

Local Notification を設定する際に、指定した日時でトリガーされるようにした時の UNCalendarNotificationTrigger の生成方法をメモしておきます 結論 結論としては下記のようになります。日時でトリガーする際に必要な UNCalendarNotificationTrigger は D…

【Swift】csv からデータを取得するメモ

今回は csv からデータを取得する方法をメモ程度に残しておきます。 それではやっていく 下記のような、お酒の情報が並んだ liquors.csv ファイルからデータを取得していきたいと思います。 ビール1缶,5,350 ビール1缶,5,500 チューハイ1缶,5,350 チューハイ…

【Swift】SwinjectStoryboard を便利に使う

今回は短い内容になりますが、SwinjectStoryboard と通常の Storyboard で UIViewController を生成する方法を紹介したいと思います‍♀️ SwinjectStoryboard については下記を参照してください。ちなみに現時点でリリースされている最新版のソースをビルドす…

【Swift】Date で「〇〇日前」的なやつを表示する

今回は Swift の Date で、現在から特定の Date までがどの程度離れているかを示す Text の表示方法を簡単に紹介したいと思います 結論 今回は下記のように Date に Extension メソッドを追加し、1週間以上前の Date に関しては日付を取得できるようにしてみ…