Tag Swift

Update!

Swift: デザインパターン > 生成パターン > Singleton

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。 デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。 自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。 今回は Swift で避けて通ることができない、有名な 生成パターン の Singleton について説明します。 目次 [生成] Singleton パターン まとめ [生成] Singleton パターン あるオブジェクトが単一であること(オブジェクトが複数生成されていないこと)を保証するパターン。 サンプルコード Singleton.swift ViewController.swift 実行結果 まとめ 初見で意味がわからなくても、サンプルコードを繰り返しコーディングしているうちに、突然ある時期を境に理解できる日が来ます。何事も理解するまで続けることができるかどうかが、その人の適正だったり才能なのかもしれません。 次回は 生成パターン の Prototype パターンを説明したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: WKWebView で 3D Touch を無効にする

iOS 9 から登場した 3D Touch は非常に便利な機能で対応アプリも増えてきていますが、この機能を活用できているユーザーは今のところ少数に思います。 また、Web アプリとなってくるとこの機能が出現すると不都合なときがあり、便利なはずの 3D Touch がユーザビリティを低下させてしまうリスクがあります。 今回は WKWebView でこの 3D Touch を無効にする方法をメモしておきます。 目次 WKWebView で 3D Touch を無効にする まとめ WKWebView で 3D Touch を無効にする WKWebView のデリゲートメソッド shouldPreviewElement で false を返します。 まとめ 3D Touch は デバイス上の物理的な仕組みと連携し機能する iOS 独自のジェスチャーです。 3D Touch 非対応の iOS デバイスユーザーや Android ユーザーにとっては LongPress と混同しがちですが、全く別物です。 このジェスチャーがデファクトスタンダートとなるには時間がかかりそうですが、iOS アプリ開発者は、なるべく今回説明した 3D Touch を無効にする方法ではなく、積極的に導入し利用を促すことが大切だと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: iOS のバージョン判定を行う

あらかじめ iOS の後方互換を考慮しバージョン判定を使用し、条件に応じて各 OS に対応する機能を振り分ける機会はあるかと思います。 今回は NSFoundationVersionNumber を使用し、フレームワークのバージョンにより判定を行う方法を説明したいと思います。 目次 iOS のバージョン判定を行う まとめ iOS のバージョン判定を行う NSFoundationVersionNumber を利用し、条件を分岐します。 iOS 8.1 以上かどうか (iOS 8.0 以下) の判定 まとめ 今回の方法で判定すれば、システムのバージョンの文字列を取得しキャスト、比較するといった煩雑さもなくなり、可読性もよくなるのでオススメです。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: アルバム・カメラ・マイク・プッシュ通知のアクセス許可判定一覧

自分用にアプリ開発時、よく使用するユーザーアクセス許可判定を関数化しメモしました。 コピペで即時利用可能ですので、お役立ていただければと思います。 目次 アルバム・カメラ・マイク・プッシュ通知のアクセス許可判定一覧 まとめ アルバム・カメラ・マイク・プッシュ通知のアクセス許可判定一覧 カメラとマイクのアクセス判定は、事前に AVFoundation Framework をインポートしておく必要があります。 アルバム カメラ マイク プッシュ通知 まとめ アプリがこれらの機能のアクセスを必須とする場合、判定時に許可されていない、選択をおこなっていない、拒否している場合にはアラートを出し、再度アクセス許可を促すようにすればいいかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: 配列の操作まとめ

Swift でよく使う基本的な配列の操作を、基本的なものからまとめました。 目次 配列の操作まとめ まとめ 配列の操作まとめ 空の配列(String型)を作成 n 番目、最初、最後の要素を取得 要素の数を取得 配列の空チェック 配列の後ろに要素を1つ追加 //配列の2番目に要素を挿入する 3番目、最初、最後の要素を削除 配列をソート(昇順/降順) 配列の値を逆順にする 特定の文字列があるかを調べる 配列から、ある値(10)より大きい値の新しい配列を作成 特定の要素(“X”)がなければ追加する 特定の要素(“B”)があれば削除する まとめ 今回は配列の基本的な操作の説明でしたが、そのほかにも map, reduce を使えば、一括で配列の値を変更できる強力なものもあります。 これらは実際に使ってみて便利だと実感したときに、投稿に加筆したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: dispatch_after で遅延処理を行う

適当な処理のコールバック時にさらに別の処理を行ったりする際、実行するタイミングの問題で不具合を起こしたり、処理の引数が複数存在する場合や戻り値によっては、処理自体が正常に行われなかったりクラッシュになる場合があります。 そういったときには、スレッド処理の dispatch_after が便利です。 今回はこの dispatch_after の使い方をメモしておきます。 目次 dispatch_after で遅延処理を行う まとめ dispatch_after で遅延処理を行う 遅延処理を行いたい場所で以下の関数呼び出し、関数内の print の部分に処理を書いていけばいいかと思います。 dispatch_after 使い方 まとめ スレッドでの様々な処理は、一度使い方を覚えてしまうととても便利です。 通常時に処理を遅らせたいだけであれば NSTimer 等を使うはずですが、それでうまくいかない、思い通りの結果が出ないときは今回の dispatch_after を使用する、と覚えておけばいいかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: 高さ一覧

アプリ開発中にはオブジェクトの様々なサイズ取得は頻繁に行うことと思います。 いままで bounds や frame のどっちが何を意味するかを深く考えずに、Xcode のサジェストに頼りきりで、知識として定着していませんでした。 今回は、その反省と頭の中を整理するために、頻繁に利用するオブジェクトの「高さ」に焦点を当て、Swift で様々な高さを取得するための一覧をメモしておきます。 目次 高さ一覧 まとめ 高さ一覧 ステータスバーの高さ 画面の高さ(ステータスバー含まず) 画面の高さ(ステータスバー含む) ナビゲーションバーの高さ ツールバーの高さ タブバーの高さ まとめ いつも UIScreen.mainScreen().applicationFrame と UIScreen.mainScreen().bounds でどういった違いがあったか忘れてしまいます。 こうして一覧にしてみてみると applicationFrame は名前の通り「アプリケーションの枠」なので、ステータスバーが含まれないことは自明の理でしたね(笑) この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: アプリケーションのスリープを無効にする

すべてのアプリにおいて、開発者が想定している使い方をしてくれるほどユーザーは優しくはありません。 なかにはアプリ使用中にも関わらずいきなりスリープボタンを押す、といった開発側には嫌がらせともとれる想定外の行動をとるユーザーもいます(笑) ユーザーの意思によるスリープを抑止することはできませんが、アプリ側で自動的にスリープしない方法は存在します。 今回は、このアプリのスリープを無効にする方法を説明したいと思います。 目次 アプリのスリープを無効にする まとめ アプリのスリープを無効にする UIApplication クラスのプロパティに idleTimerDisabled という Bool 値があるので、これを true にすればアプリがスリープしなくなります。 以下は AppDelegate の didFinishLaunchingWithOptions 内に記述した場合の例です。 AppDelegate.swift まとめ この設定を行うとアプリがスリープしなくなるので、当然ながら電力の消費量も多くなってしまうことが考えられます。 やみくもにスリープしなくなるアプリも問題ですので、自動的にスリープされると都合が悪い処理が行なわれている部分でのみ 設定を切り替えるようにすればいいかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: WKWebView の userContentController で取得した JSON を使用する

WKWebView は、JavaScript の受け渡しがとても楽に行えるのが大きなメリットです。 単なる文字列としてメッセージ送信を実行すれば、それだけでネイティブ側をコントロールできるのですが、JSON 自体をメッセージで送信し、メッセージハンドラ経由で WKWebView で JSON を受け取ることも可能です。 今回は、メッセージハンドラで JSON を受け取り SwiftyJSON でパースした値を print 出力したいと思います。 目次 準備 JSON を送受信する まとめ 準備 Lead(承) JSON の準備 サーバー側で適当な JSON を用意します。 WKWebView の準備 ViewController に WebKit をインポートし、デリゲートメソッド userContentController を実装しておきます。 SwiftyJSON の準備 そのまま JSON を利用することも可能ですが、今回は JSON へのアクセスを簡単にしてくれる SwiftyJSON をダウンロードし、プロジェクトにインポートしておきます。 これで準備は完了です。 JSON を送受信する 先ほどの JSON をメッセージハンドラで送信、ViewController で受信します。 メッセージ(JSON)の送信 メッセージ(JSON)の受信 userContentController の中で受け取った JSON を SwiftyJSON でデコードし、print 出力します。 結果 まとめ とくに面倒な手順もなく、思いの外かんたんに JSON がネイティブに受け渡せたことと思います。 現在 WKWebView がデファクトスタンダードとなりつつあり、今後は UIWebView から WKWebView への移行は加速していくと思われます。 WKWebView で実現できないことは、セキュリティ上の問題があることが多いはずですので、UIWebView を利用しているアプリがあれば、早めにシフトしておくといいのではないでしょうか。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: アプリ内でユニーク ID (UUID) を生成する

サーバーからユーザーのユニークな ID を取得し、データ処理を行うことはよくあると思います。 一方アプリからユニークな ID を発行し使用したい場合、ID 生成のためのクラスやファンクションを実装することになります。 今回は、Swift であらかじめ用意されている関数を使用し、ユニークな ID を生成する方法をメモしておきます。 目次 ユニークな ID (UUID) を生成する まとめ ユニーク ID (UUID) を生成する 以下のように NSUUID メソッドを使用すれば、たった1行でユニーク ID (UUID) が生成できます。 UUID 生成 結果 まとめ 上記 UUID メソッドでは 16 進数で 32 桁の ID を生成します。 もちろん、このメソッドでは 100% ユニークな値が保証されるわけではありません。 ちなみに、この方法で生成された ID が被ってしまう確率は、 340,282,366,920,938,463,463,374,607,431,768,211,456 分の 1 (340澗2823溝6692穰9384634垓6337京4607兆4317億6821万1456) です。安心して使わせていただきましょう(笑) この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。