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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

解決済

SwitUIで@EnvironmentObjectを利用する際、Struct内で使えません

BONO99
BONO99

総合スコア3

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

1回答

0評価

0クリップ

255閲覧

投稿2021/12/07 14:55

前提・実現したいこと

SwiftUIを使ったアプリを制作しております。
@EnvironmentObjectを用いて、「アプリ名APP.swift」内に作成したClassの値を別の「.swift」ファイルで参照しようとしています。
1つの「.swift」ファイル内で参照してきた値が使える場所と使えない場所が出てきて解決策が見つかりません。

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

Instance member 'user' cannot be used on type 'DetectSoundsView'

該当のソースコード

Swift

import Foundation import SwiftUI import AVFoundation struct DetectSoundsView: View{ @EnvironmentObject var user : User // Viewのパーツ static func generateMeter(confidence: Double) -> some View { let mail = "(user.value2)" //ここにエラーが発生してしまいます if numLitBars >= 13{ let smtpSession = MCOSMTPSession() smtpSession.hostname = "smtp.gmail.com" smtpSession.username = "@gmail.com" smtpSession.password = "" smtpSession.port = 465 smtpSession.authType = MCOAuthType.saslPlain smtpSession.connectionType = MCOConnectionType.TLS smtpSession.connectionLogger = {(connectionID, type, data) in if data != nil { if let string = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){ NSLog("Connectionlogger: (string)") } } } let builder = MCOMessageBuilder() builder.header.to = [MCOAddress(displayName: "送信先", mailbox: mail)!] builder.header.from = MCOAddress(displayName: "", mailbox: "@gmail.com") builder.header.subject = "" builder.htmlBody = "" let rfc822Data = builder.data() let sendOperation = smtpSession.sendOperation(with: rfc822Data) sendOperation!.start { (error) -> Void in if (error != nil) { NSLog("Error sending email: (String(describing: error))") } else { NSLog("Successfully sent email!") sleep(30) } } } else if numLitBars <= 13{} return VStack(spacing: barSpacing) { ForEach(0..<numBars) { Rectangle() .foregroundColor(barColors[numBars - 1 - $0]) .opacity(barOpacities[numBars - 1 - $0]) .frame(width: barDimensions.0, height: barDimensions.1) } }.animation(.easeInOut, value: confidence) } var body: some View { VStack { Text("(user.value2)").font(.title).padding() //ここには参照してきた値が反映されます struct DetectSoundsView_Previews: PreviewProvider { static var previews: some View { /*@START_MENU_TOKEN@*/Text("Hello, World!")/*@END_MENU_TOKEN@*/ } }

補足情報(FW/ツールのバージョンなど)

Swift5 / Xcode13.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

BONO99

2021/12/08 01:36

ご教示有難うございます!!なるほど、だからこのstatic内ではエラーが出てしまっていたのですね;; どうしても変数を持ってきて中の値を書き換えて使いたいのですが、単純にstatic を classに置き換えてもエラーが発生してしまいました…(他の部分と干渉してしまっているのかも??) 何か解決策や代替案などの可能性などはありませんでしょうか?
hoshi-takanori

2021/12/08 04:50

単純に static func をただの func にすれば良いだけでは…。
BONO99

2021/12/10 00:54 編集

(修正します!) 1か所、staticを外し忘れていました(-_-;) ご教示のとおりエラーがすべて消え去りました!ありがとうございます!

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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