質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift Playgrounds

Swift Playgroundsは、初心者・子ども向けのSwift学習アプリ。iPad/Mac用があり、コーディングの知識は不要です。Swiftの言語そのものを選択肢からタップしてコード入力できる点が特徴。段階的に学習を積み上げる初心者にも優しい設計ながらも、正統派のSwiftが学べます。

Q&A

解決済

1回答

912閲覧

SwiftでSFSafariViewControllerを使いたい

iambunnbunn

総合スコア1

Swift Playgrounds

Swift Playgroundsは、初心者・子ども向けのSwift学習アプリ。iPad/Mac用があり、コーディングの知識は不要です。Swiftの言語そのものを選択肢からタップしてコード入力できる点が特徴。段階的に学習を積み上げる初心者にも優しい設計ながらも、正統派のSwiftが学べます。

0グッド

0クリップ

投稿2022/07/17 13:31

編集2022/07/17 13:59

質問

SwiftUI でシステムを作っています。
safariのプレビューみたいな機能を実装中に以下のエラーメッセージが発生しました。

解説してほしいこと

  • 機能を動作するようにする

  • エラーメッセージを直す

発生している問題・エラーメッセージ

エラーメッセージ “Cannot find ‘present’ in scope”

該当のソースコード

ContentView

SwiftUI

1 2import SwiftUI 3import SafariServices 4import UIKit 5struct ContentView: View { 6 7 var body: some View { 8 9 10 VStack { 11 12 Button(action: { 13 let url = URL(string:"https://www.google.co.jp/") 14 if let url = url{ 15 let vc = SFSafariViewController(url: url) 16 present(vc, animated: true) 17 //“Cannot find ‘present’ in scope” 18 19 } 20 }, label: { 21 Text("画面を見る") 22 }) 23 24 } 25 } 26}

Myapp

SwiftUI

1 2import SwiftUI 3 4@main 5struct MyApp: App { 6 var body: some Scene { 7 WindowGroup { 8 ContentView() 9 } 10 } 11} 12

試したこと

調べても無理でした

補足情報

Playground (swift) のapp版を使っています
IpadOS15.5,swift5.3
自主学習でプログラミングしているので初心者です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iambunnbunn

2022/07/17 13:36

ちなみにiPadを使っています。
guest

回答1

0

ベストアンサー

Cannot find ‘present’ in scope

このエラーはSwiftUIからUIKitの機能を正しくない形で使おうとしているから発生していると思います。

SwiftUIからUIKit(SFSafariViewControllerなどのViewController)を使う場合は
UIViewRepresentableプロトコルに準拠したクラスを実装する必要があるみたいです。

If your app lets users view websites from anywhere on the Internet, use the SFSafariViewController class. If your app customizes, interacts with, or controls the display of web content, use the WKWebView class.
(機械翻訳)インターネット上のどこからでもウェブサイトを見られるようにするには、 SFSafariViewController クラスを使用します。ウェブコンテンツをカスタマイズしたり操作したり、 あるいは表示を制御したりするアプリの場合は WKWebView クラスを使用します。
https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller

*SFSafariViewControllerよりWKWebViewで実装する形の方が情報が多いかもしれません

以下、参考リンクです。

SwiftUIからWKWebViewを使う内容の記事です(日本語)。
https://qiita.com/wiii_na/items/36123cf901839a8038e2

公式のドキュメントも参照すると良いと思います(英語)。
https://developer.apple.com/documentation/webkit/wkwebview
https://developer.apple.com/documentation/swiftui/uiviewrepresentable
https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit

投稿2022/07/17 14:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iambunnbunn

2022/07/17 14:17

アドバイス通り大人しくWKWebViewを使うことにします。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問