【Swift UI】URLリンクボタンの作成方法!Link構造体や@Environment(openURL)

この記事からわかること
- Swift UIでリンクボタンの作成方法
- Link構造体の使い方
- URL型へキャストするには?
- UIKitのUIApplication.openメソッド
- Swift UIの@EnvironmentのopenURL
index
[open]
\ アプリをリリースしました /
Swift UIでWebサイトへのリンクボタンを作成する方法を3種類まとめていきたいと思います。
Swift UIでURLリンクボタンの作成方法
Swift UIフレームワークを使ってWebサイトなどへのリンクボタンを作成するにはLink
構造体を使って簡単に作成できます
Linkの定義とイニシャライザ
使用例1
使用例2
引数destination
にはURL型の文字列を渡します。ただのURLの文字列ではエラーになってしまうのでURL
構造体のイニシャライザを使って型変換していきます。
UIKitのUIApplicationクラスを使ったボタンリンク
Link
構造体ではなくUIKitフレームワークのUIApplication
クラスのopen
メソッドを使用しても指定したURLへ飛ばすことが可能です。この方法の場合はボタンだけでなく、処理の中に混ぜ込むことも可能になります。
定義
使用例
openメソッドでユニバーサルリンクのみ開けるようにする
ユニバーサルリンクとはディープリンクの1つでWebサイトのURLをクリック時に指定したiOSアプリを起動させる手法のことです。実際に実装するにはWeb側での「apple-app-site-association
」ファイルの設置などやることが多いので今回は記述しません。
open
メソッドでは引数options
に.universalLinksOnly: true
を渡すことで指定したURLがユニバーサルリンクに対応していれば遷移を実行し、対応していなければ遷移しないようにすることができます。
openメソッドで遷移の可否で処理を分割
open
メソッドの引数にはcompletionHandler
が用意されています。これはSwiftの仕組みの1つでありいわゆる「イベントドリブン」な仕組みでイベントが発生してから処理を実行させることができます。
completionHandler
はクロージャとして渡します。open
メソッドのcompletionHandler
はイベント(Webページへ遷移したかどうか)が発生後、クロージャの引数に遷移したかどうかのBool(真偽)値
が渡されます。
遷移が成功するパターン
リンクがユニバーサルリンクに設定していないので遷移しないパターン
Swift UIの@EnvironmentからopenURLで遷移する
Swift UIで使えるProperty Wrapper(プロパティラッパ)の1つ、環境値を読み取れる「@Environment
」を使用することでURLリンクへ移動することが可能です。
Property Wrapper(プロパティラッパ)とは宣言するプロパティ(変数)に対してキーワードを追加するだけで特定の処理や操作、機能を持たせることができる仕組みです。
@Environment
ではカラースキーム(ダークモードなど)やタイムゾーンなど環境によって変化する値を参照、操作することはできます。中でもopenURL
は適切なシステムサービスを使ってURLリンクへと遷移してくれます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書