Tag Swift

New!

Swift: デザインパターン > 構造パターン > Bridge

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。 デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。 自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。 今回は 構造パターン の Bridge について説明します。 目次 [構造] Bridge パターン まとめ [構造] Bridge パターン クラスなどの実装と、呼出し側との橋渡し(Bridge)するクラスを用意し、実装と機能を分離することで、実装の変更や機能追加を容易にする。 サンプルコード AbstractColor.swift ConcreteWhiteColor.swift ConcreteBlackColor.swift ImplementWhiteColor.swift ImplementBlackColor.swift ViewController.swift 実行結果 まとめ AbstractColor という抽象クラスと protocol Implementor の Bridge(橋渡し)により、実装と機能が分離されています。 これにより、サブクラス(実装)を追加しても、その都度機能を実装する必要がなくなるため、プロジェクトのメンテナンス性が向上します。 次回は 構造パターン の Composite パターンを説明したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。
Update!

Swift: デザインパターン > 構造パターン > Adapter

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。 デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。 自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。 今回は 構造パターン の Adapter について説明します。 目次 [構造] Adapter パターン まとめ [構造] Adapter パターン 互換性のないインタフェースを持つクラス同士に手を加えず、共通のインタフェースを提供する。 サンプルコード Adapter.swift Adaptee.swift ViewController.swift 実行結果 まとめ Objective-C や Swift でおなじみの protocol を利用し、Adaptee クラスを継承することで、Adapter クラスで requiredMethod を実装しています。 次回は 構造パターン の Bridge パターンを説明したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。
Update!

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

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。 デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。 自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。 前回は Factory Method パターンを説明しましたが、もう一つの Factory パターンである 生成パターン の Abstract Factory について説明します。 目次 Factory について [生成] Abstract Factory パターン まとめ Factory の概要 オブジェクトの 生成 と、オブジェクトの 実装 を 分離する するパターン。 プロダクトを発注する側は、工場内でどういった工程を経てプロダクトが完成するかを知らなくても、工場に対しプロダクトを要求すれば、プロダクトを受け取る事ができる。 この仕組みにより、プロダクト発注側はプロダクトの管理 に、工場側はプロダクトの生産工程 に集中できるようになる。 [生成] Abstract Factory パターン 複数の関連オブジェクトを、各具象クラス(ConcreteProduct)を明確にせず、オブジェクト生成の インタフェースのみを提供する。 Factory の原則と Factory Method パターンとの違い Factory の原則 オブジェクトを生成するとき、オブジェクトの生成のためのインタフェースを提供し、インスタンス化するクラスを決定する役割はサブクラスで行う。 Factory Method パターン オブジェクトを生成するとき、オブジェクトの生成のためのインタフェースを提供し、インスタンス化するクラスを決定する役割はサブクラスで行う。 Abstract Factory パターン オブジェクトを生成するとき、具体的なクラスを明確にせず(カプセル化)、生成のためのインタフェースを提供する。 パターンの概要 Product Protocol により抽象的に生成オブジェクト ConcreteProduct のインタフェースを決定する。 ConcreteProductA, B 具体的な Product を決定する。 サンプルコード ConcreteProductA.swift ConcreteProductB.swift ViewController.swift 実行結果 まとめ Abstract Factory パターンにより、具象オブジェクトの実装を気にすることなく、オブジェクトの生成と生成したオブジェクトの利用に専念できるようになり、コードのメンテナンス性が向上しました。 次回は 構造パターン の Adapter パターンを説明したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。
Update!

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

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。 デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。 自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。 今回は 生成パターン の Factory Method について説明します。 目次 Factory の概要 [生成] Factory Method パターン まとめ Factory の概要 オブジェクトの 生成 と、オブジェクトの 実装 を 分離する するパターン。 プロダクトを発注する側は、工場内でどういった工程を経てプロダクトが完成するかを知らなくても、工場に対しプロダクトを要求すれば、プロダクトを受け取る事ができる。 この仕組みにより、プロダクト発注側はプロダクトの管理 に、工場側はプロダクトの生産工程 に集中できるようになる。 [生成] Factory Method パターン オブジェクトの生成のインタフェースを提供し、インスタンス化するクラスを決定するのはサブクラスで行う。 Factory の原則と Abstract Factory パターンとの違い Factory の原則 オブジェクトを生成するとき、オブジェクトの生成のためのインタフェースを提供し、インスタンス化するクラスを決定する役割はサブクラスで行う。 Factory Method パターン オブジェクトを生成するとき、オブジェクトの生成のためのインタフェースを提供し、インスタンス化するクラスを決定する役割はサブクラスで行う。 Abstract Factory パターン オブジェクトを生成するとき、具体的なクラスを明確にせず(カプセル化)、生成のためのインタフェースを提供する。 パターンの概要 Product 生成オブジェクト ConcreteProduct のインタフェースを決定 ConcreteProduct 具体的な製品を決定します。 サンプルコード Product.swift ConcreteProduct.swift ViewController.swift 実行結果 ※ XXX はプロジェクト名 まとめ 今回は ViewController の Protocol と Extension を利用して抽象クラスを実現していますが、次期 Swift では抽象クラスにも対応するみたいです。 次回は 生成パターン の Abstract Factory パターンを説明したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

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

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。 デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。 自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。 今回は 生成パターン の Builder について説明します。 目次 [生成] Builder パターン まとめ [生成] Builder パターン Builder はオブジェクトの生成(建築)過程を抽象化し、動的にオブジェクトを生成(建築)することを可能にするパターンです。 パターンの概要 Director Builder に提供されているインタフェースを使用しオブジェクトを生成(建築)する。 Builder オブジェクト生成(建築)過程のインターフェースを定義する。 ConcreteBuilder Builder が定義したインターフェースを実装する。 Product Builder により生成されたオブジェクト(成果物)。 サンプルコード Director.swift Builder.swift ConcreteBuilder.swift Product.swift ViewController.swift 実行結果 まとめ Director は ConcreteBuilder をすることで、Product が生成されていることが確認できます。 次回は 生成パターン の Factory Method パターンを説明したいと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

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で共有していただければ幸いです。