[SwiftUI] ShareLink の使い方(その1)
Subject については Apple のドキュメントでは、以下のように説明されています。 subject A title for the item to show when sharing to activities that support a subject field.
どのようなアプリが subject field に対応しているか気になりますが、記載はありません・・・・
メールアプリは対応しているようですが、それ以外は不明です。 例えば、Reminder は、受け取ってくれません。
MessageMessage については、Apple のドキュメントでは、以下のように説明されています。 message A description of the item to show when sharing to activities that support a message field. Activities may support attributed text or HTML strings.
Message が Subject と異なる点は、message を指定した時に、共有シートにも表示される点です。 (別に preview が指定すると表示されなくなります。)
本記事では、シェア対象の item にフォーカスして説明しますので、subject, message はほとんど登場しません。
シンプルな使い方
ShareLink は、String と URL を特別扱いしていて、この2つの share であれば、非常に簡単にできるようになっています。
String をシェアString “MyShareString” を share するためのコードは以下のようになります。
ShareLink(item: "MyShareString") Transferable に conform しているString上記のように、String をそのまま ShareLink に使えたのは、String がすでに Transferable に conform しているからです。
Transferable に準拠しているものは、ShareLink の item として渡すことができます。
Playground でも以下のようにして、String に transferRepresentation が定義されていることを確認することができ、Transferable に conform していることが確認できます。
import Foundation import SwiftUI print(String.transferRepresentation) // printout DataRepresentation(contentType: _UTCoreType 0x7ff864a58c30> public.utf8-plain-text (not dynamic, declared), exporting: Optional((Function)), importing: Optional((Function)))Label をカスタマイズ
通常はこの共有ボタンで十分かもしれませんが、この共有ボタンをカスタマイズすることも可能です。 共有ボタンをカスタマイズするためには、label: で指定します。
ShareLink(item: "Hello", label: < Label(title: < Text("MyOwnShare") >, icon: < Image(systemName: "paperplane")>) >)label として Label を指定しているので、テキストだけでなく、アイコンも指定したものが使用されています。
共有シート上での表示カスタマイズ
上記は、String を共有対象としたときに表示される 共有シート です。String を共有しようとしているので、イメージ部分は テキストを表すイメージ、メッセージ部分は、共有オブジェクトそのものを表示しています。
メッセージ部分をカスタマイズ共有オブジェクトが String で、特にメッセージ部分を指定していない場合は、共有オブジェクト(String) がそのまま表示されます。 共有対象として、message も指定しているとその Text が表示されます。
ShareLink(item: "Hello", subject: Text("Subject"), message: Text("Message"))以下のように、メッセージ部分に Message と表示されるようになります。
なお、message 引数の説明には、”A description of the item to show when sharing to activities that support a message field. Activities may support attributed text or HTML strings.” と書いてありますが、 Markdown を使った Text を渡すと、(少なくとも) 共有シートではメッセージは非表示になってしまいました。(共有先には渡されましたので、共有シートが AttributedString 的な要素の表示に非対応なのだと推測します @iOS16.3時点)
イメージ部分をカスタマイズこの SharePreview では、イメージ部分とメッセージ部分の両方を指定します。
message: 引数で指定する Text でもカスタマイズできていましたが、あくまで 共有する情報を使って、 Preview を作成していたと言う状態です。 SharePreview に渡される情報は Preview のためであり、共有先のアプリには渡されません。
ShareLink(item: "Hello", preview: SharePreview("MyText", image: Image("MyImage")))なお、SharePreview に イメージやメッセージを渡していますが、あくまでそれは Preview に使用されているだけです。共有先のアプリに渡されるのは、共有オブジェクトである “Hello” です。
すべてをカスタマイズした ShareLink
すべてを組み合わせて使用することもできます。 つまり、共有ボタンになるラベルも指定して、共有シートに表示される イメージとメッセージも指定しているケースです。
ShareLink(item: "Hello", preview: SharePreview("MyText", image: Image("MyImage")), label: < Text("MyShareLabel")>)なお、message と preview を同時に指定されることも 考えられますが、同時に指定された場合、共有シートには preview で指定した情報が表示されます。
次回
本記事では、String を共有対象として 共有ボタンや共有シートのカスタマイズを確認しました。
まとめ
ShareLink の使い方- item: 引数が共有オブジェクト
- subject, message で追加情報も共有できる(ただし、使用方法不明)
- SharePreview を使用することで共有シート上での preview を指定できる
SwiftUI おすすめ本
SwiftUI ViewMaterySwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。 英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。
View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。
超便利です
SwiftUI 徹底入門# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。
Swift学習におすすめの本
詳解SwiftSwift の学習には、詳解 Swift という書籍が、おすすめです。
著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。
現時点では、上記の Swift 5 に対応した第5版が最新版です。
関連記事: コメントを残す コメントをキャンセル [AppStore] AppStore 登録に必要なスクリーン… [Swift]コードスニペット willSet/didSet サイトメニュー Recent Posts [swift] Date と ISO8601文字列を 相互変換する [Swift][Vapor] Vapor と PostgreSQL を使ってみる(テーブルを作ってみる) [Swift][Vapor] Vapor と PostgreSQL を組み合わせる(準備編) [Swift][Vapor] Vapor と Redis を組み合わせて使う(docker-compose.yaml 修正) [Swift][Vapor] Vapor と Redis を組み合わせて使う カテゴリー タグ アーカイブ© 2026 SmallDeskSoftware All rights reserved.