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

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

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

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

Q&A

0回答

929閲覧

Cannot convert value of type 'String' to expected argument type 'EnvironmentObject<DataManager>'の解消法

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2021/08/17 00:23

編集2021/08/17 01:43

前提・実現したいこと

swiftを学び始めて間も無いものです
swiftでCheckBoxの隣に外部から操作できるテキストを表示するviewを作り、ContentViewに配置したところ以下のエラーメッセージが発生しました。
CheckBoxView(dataManager.textCheck: "ur") というところがおかしいのだと思いますが、どう直すのかわかりません
"ur"をcheckboxの隣に表示したいです

エラーに関しては、特に「Cannot convert value of type 'String' to expected argument type 'EnvironmentObject<DataManager>'」の部分についてはさっぱりわからないので教えて頂けると嬉しいです
よろしくお願いします

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

Cannot convert value of type 'String' to expected argument type 'EnvironmentObject<DataManager>'

Expected ',' separator

Expected expression in list of expressions

Missing argument label 'dataManager:' in call

該当のソースコード

量も多いので該当する部分を載せます

swift

1 2import SwiftUI 3 4struct ContentView: View { 5 6 @EnvironmentObject var dataManager : DataManager 7 8 9 var body: some View { 10 CheckBoxView(dataManager.textCheck: "ur") 11 } 12} 13 14 struct ContentView_Previews: PreviewProvider { 15 static var previews: some View { 16 ContentView() 17 .environmentObject(DataManager()) 18 } 19 } 20

swift

1import SwiftUI 2 3class DataManager: ObservableObject { 4 5 @Published var isChecked = false 6 7 @Published var textCheck = "" 8 9 10 func tap(){ 11 if isChecked == false{ 12 isChecked = true 13 }else { 14 isChecked = false 15 } 16 } 17 18} 19 20

swift

1 2import SwiftUI 3 4struct CheckBoxView: View { 5 @EnvironmentObject var dataManager: DataManager 6 7 8 var body: some View { 9 10 HStack{ 11 Button(action: dataManager.tap 12 ){if dataManager.isChecked == true{ 13 Image(systemName: "checkmark.square.fill") 14 .foregroundColor(.green) 15 } else { 16 Image(systemName: "square") 17 } 18 } 19 20 Text(dataManager.textCheck) 21 } 22 23 } 24} 25 26struct CheckBoxView_Previews: PreviewProvider { 27 static var previews: some View { 28 CheckBoxView() 29 .environmentObject(DataManager()) 30 } 31} 32

試したこと

CheckBoxViewに var text = "" を追加して
Text(dataManager.textCheck)   から    Text(text) に、
CheckBoxView(dataManager.textCheck)  から  CheckBoxView(text) に変更することでCheckBoxの隣にテキストをつけることはできました

なので 「text」が「dataManager.textCheck」 に 変えただけなので問題ないと思っていましたがエラーになってしまいました

textCheckの変数は今後様々なviewで使いたいのでtextCheckに代入できるようにしたいです

###利用環境

xcode Version 12.5.1
mac book air 2013

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

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

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

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

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

hoshi-takanori

2021/08/17 00:45

CheckBoxView(dataManager.textCheck: "ur") がエラーになってますが、これは何を意図したものでしょうか? というか、EnvironmentObject の利用目的を勘違いされている気がします…。
退会済みユーザー

退会済みユーザー

2021/08/17 01:17

お返事くださりありがとうございます まず、checkboxの隣に様々なテキストを表示したかったので、CheckBoxViewという雛形を作りました。 次に、テキストをContentViewで指定できるようにしたいと思い、「試したこと」の欄にあるような方法でできるというのを見て、DataManagerの変数textCheckでもできるのではないかと思い、このようになってしまいました。 拙い文章ですいません まだ理解が浅く、話が通じないところだらけではありますが、ぜひ教えていただけると幸いです
hoshi-takanori

2021/08/17 10:12

CheckBoxView(dataManager.textCheck: "ur") の意図は、textCheck を "ur" に設定した DataManager を渡したいってことだと思いますが、残念ながらそのような書き方はできません。(そのために、コンパイラが混乱して意味不明なエラーメッセージになってます。) やりたいことは CheckBoxView を、一つのアプリの中で複数箇所に、別々の内容を表示・チェック状態を変更できるようにしたいということだと思いますが、その場合 EnvironmentObject は向いてません。無理にやればできなくもないですが、基本的に EnvironmentObject は、アプリ全体 (またはその一部) で同じ内容を共有するためのものなので。
退会済みユーザー

退会済みユーザー

2021/08/18 12:20

そうなのですね。 ありがとうございます。 もしよろしければ他の方法でどのように実現させるかご教示いただけないでしょうか。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問