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

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

新規登録して質問してみよう
ただいま回答率
85.47%
コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2338閲覧

swiftで"Cannot infer contextual base in reference to member 'actionSheet' "とエラーが出てしまいました。

atomu__

総合スコア3

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/09/20 12:34

swift初学者です。swiftでたった2日でマスターできるiPhoneアプリ開発集中講座という書籍を参考に、カメラアプリを作っていると、"Cannot infer contextual base in reference to member 'actionSheet' "とエラーが出てしまいました。
誰かこのエラーの解決策を教えてください。

エラーメッセージ

Cannot infer contextual base in reference to member 'actionSheet'

該当のソースコード

swift

1// 2// ContentView.swift 3// MyCamera 4// 5// Created by on 2022/09/13. 6// 7 8import SwiftUI 9 10struct ContentView: View { 11 //撮影した写真を保持する状態変数 12 @State var captureImage: UIImage? = nil 13 //撮影画面(sheet)の開閉状態を管理 14 @State var isShowSheet = false 15 //シェア画面の(sheet)の開閉状態を管理 16 @State var isShowActivity = false 17 //フォトライブラリーかカメラかを保持する状態変数 18 @State var isPhotolibrary = false 19 //選択画面(ActionSheet)のsheet開閉状態を管理 20 @State var isShowAction = false 21 22 var body: some View { 23 //縦方向にレイアウト 24 VStack { 25 //スペースを追加 26 Spacer() 27 //撮影した写真がある時 28 if let unwrapCaptureImage = captureImage { 29 //撮影写真を表示 30 Image(uiImage: unwrapCaptureImage) 31 //リサイズ 32 .resizable() 33 //アスペクト比(縦横比)を維持して画面内に 34 .aspectRatio(contentMode: .fit) 35 } 36 37 //スペースを追加 38 Spacer() 39 //カメラを起動するボタン 40 Button(action: { 41 //ボタンをタップした時のアクション 42 //ActionSheetを表示する 43 isShowAction = true 44 }) { 45 46 //状態変数:$isShowSctionに変化があったら実行 47 .actionSheet(isPresented: $isShowAction) {  //エラー発生 48 //ActionSheetを表示する 49 ActionSheet(title: Text("確認"), 50 message: Text("選択してください"), 51 buttons: [ 52 .default(Text("カメラ"), action: { 53 //フォトライブラリーを選択 54 isPhotolibrary = false 55 //カメラが利用可能かチェック 56 if UIImagePickerController.isSourceTypeAvailable(.camera){ 57 print("カメラは利用できます") 58 //カメラが使えるなら、isShowSheetをtrue 59 isShowSheet = true 60 } else { 61 print("カメラは利用できません") 62 } 63 }), 64 .default(Text("フォトライブラリー"), action: { 65 //フォトライブラリーを選択 66 isPhotolibrary = true 67 //isShowSheetをtrue 68 isShowSheet = true 69 }), 70 //キャンセル 71 .cancel(), 72 ])//ActionSheetここまで 73 }//.actionsheetここまで 74 //テキストを表示 75 Text("カメラを起動する") 76 //横幅いっぱい 77 .frame(maxWidth: .infinity) 78 //高さ50ポイントを指定 79 .frame(height: 50) 80 //文字列をセンタリングに指定 81 .multilineTextAlignment(.center) 82 //背景を青色に指定 83 .background(Color.blue) 84 //文字色を白色に指定 85 .foregroundColor(Color.white) 86 }//「カメラを起動する」ボタンここまで 87 //上下左右に余白を追加 88 .padding() 89 //sheetを表示 90 //isPresentedで指定した状態変数がtrueの時実行 91 .sheet(isPresented: $isShowSheet) { 92 //フォトライブラリーが選択された 93 if isPhotolibrary { 94 //PHPickerViewController(フォトライブラリー)を表示 95 PHPickerView( 96 isShowSheet: $isShowSheet, 97 captureImage: $captureImage) 98 } else { 99 //UIImagePickerController(写真撮影)を表示 100 ImagePickerView( 101 isShowSheet: $isShowSheet, 102 captureImage: $captureImage) 103 } 104 }//「カメラを起動する」ボタンのsheetここまで 105 //「SNSに投稿する」ボタン 106 Button(action: { 107 //ボタンをタップした時のアクション 108 //撮影した写真があるときだけ 109 //UIActibityViewController(シェア機能)を表示 110 if let _ = captureImage { 111 isShowSheet = true 112 } 113 }) { 114 Text("SNSに投稿する") 115 //横幅いっぱい 116 .frame(maxWidth: .infinity) 117 //高さ50ポイントを指定 118 .frame(height: 50) 119 //文字列をセンタリング指定 120 .multilineTextAlignment(.center) 121 //背景を青色に指定 122 .background(Color.blue) 123 //文字色を白色に指定 124 .foregroundColor(Color.white) 125 }//「SNSに投稿する」ボタンここまで 126 //上下左右に余白を追加 127 .padding() 128 //sheetを表示 129 //isPresentedで指定した状態変数がtrueのとき実行 130 .sheet(isPresented: $isShowActivity) { 131 //UIActivityViewController(シェア機能)を表示 132 ActivityView(shareItems: [captureImage!]) 133 } 134 135 }//VStackここまで 136 }//bodyここまで 137 }//ContentViewここまで 138 139 struct ContentView_Previews: PreviewProvider { 140 static var previews: some View { 141 ContentView() 142 } 143 } 144 145

補足情報

Xcodeのバージョンは14.0
機種はMacBook Pro バージョンは12.5.1です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

該当のソースコードをコピペして再現確認してみたところ
他のエラーも出たりしましたので、
次のエラーについてだけ書いてみますね。
"Cannot infer contextual base in reference to member 'actionSheet' "

質問欄のソースコードは次のような感じでボタンが実装されていると思います。
*ボタンに表示するコンテンツは{}の中に記述する形のことです

swift

1Button(action: signIn) { 2 Text("Sign In") 3}

https://developer.apple.com/documentation/swiftui/button

actionSheetはボタン(の終わりの部分)に対して記述するみたいです。
*ボタンに表示するコンテンツが1つ目の引数に設定されている形ですが、置き換えて読んでください

swift

1Button("Show Action Sheet", action: { 2 isShowingSheet = true 3}) 4.actionSheet(isPresented: $isShowingSheet) { 5 // ...省略...

https://developer.apple.com/documentation/swiftui/view/actionsheet(ispresented:content:)

ですので、.actionSheetを「「カメラを起動する」ボタンここまで」の下に移動すると良いのかなと思いました。

swift

1}//「カメラを起動する」ボタンここまで 2//状態変数:$isShowSctionに変化があったら実行 3.actionSheet(isPresented: $isShowAction) { 4 // ...省略...

投稿2022/09/21 00:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

atomu__

2022/09/21 11:34

ご回答ありがとうございます! .actionSheetを「「カメラを起動する」ボタンここまで」の下に移動したところ、エラーがなくなりました! 無事、次のレッスンに行けそうです。 初学者の私にも分かり易い回答をありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問