前提・実現したいこと
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
static メソッドではインスタンス変数は使えません。
https://teratail.com/questions/86639
ご教示有難うございます!!なるほど、だからこのstatic内ではエラーが出てしまっていたのですね;;
どうしても変数を持ってきて中の値を書き換えて使いたいのですが、単純にstatic を classに置き換えてもエラーが発生してしまいました…(他の部分と干渉してしまっているのかも??) 何か解決策や代替案などの可能性などはありませんでしょうか?
単純に static func をただの func にすれば良いだけでは…。
(修正します!)
1か所、staticを外し忘れていました(-_-;)
ご教示のとおりエラーがすべて消え去りました!ありがとうございます!
まだ回答がついていません
会員登録して回答してみよう