前提・実現したいこと
SwiftUIを使ったアプリを制作しております。
@EnvironmentObjectを用いて、「アプリ名APP.swift」内に作成したClassの値を別の「.swift」ファイルで参照しようとしています。
1つの「.swift」ファイル内で参照してきた値が使える場所と使えない場所が出てきて解決策が見つかりません。
発生している問題・エラーメッセージ
Instance member 'user' cannot be used on type 'DetectSoundsView'
該当のソースコード
Swift
1 2import Foundation 3import SwiftUI 4import AVFoundation 5 6struct DetectSoundsView: View{ 7 8 @EnvironmentObject var user : User 9 10 // Viewのパーツ 11 static func generateMeter(confidence: Double) -> some View { 12 13 let mail = "(user.value2)" //ここにエラーが発生してしまいます 14 15 if numLitBars >= 13{ 16 let smtpSession = MCOSMTPSession() 17 smtpSession.hostname = "smtp.gmail.com" 18 smtpSession.username = "@gmail.com" 19 smtpSession.password = "" 20 smtpSession.port = 465 21 smtpSession.authType = MCOAuthType.saslPlain 22 smtpSession.connectionType = MCOConnectionType.TLS 23 smtpSession.connectionLogger = {(connectionID, type, data) in 24 if data != nil { 25 if let string = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){ 26 NSLog("Connectionlogger: (string)") 27 } 28 } 29 } 30 31 let builder = MCOMessageBuilder() 32 33 builder.header.to = [MCOAddress(displayName: "送信先", mailbox: mail)!] 34 builder.header.from = MCOAddress(displayName: "", mailbox: "@gmail.com") 35 builder.header.subject = "" 36 builder.htmlBody = "" 37 38 let rfc822Data = builder.data() 39 let sendOperation = smtpSession.sendOperation(with: rfc822Data) 40 sendOperation!.start { (error) -> Void in 41 if (error != nil) { 42 NSLog("Error sending email: (String(describing: error))") 43 } else { 44 NSLog("Successfully sent email!") 45 sleep(30) 46 } 47 } 48 } 49 50 else if numLitBars <= 13{} 51 52 return VStack(spacing: barSpacing) { 53 ForEach(0..<numBars) { 54 Rectangle() 55 .foregroundColor(barColors[numBars - 1 - $0]) 56 .opacity(barOpacities[numBars - 1 - $0]) 57 .frame(width: barDimensions.0, height: barDimensions.1) 58 } 59 }.animation(.easeInOut, value: confidence) 60 } 61 62 63 var body: some View { 64 VStack { 65 Text("(user.value2)").font(.title).padding() //ここには参照してきた値が反映されます 66 67struct DetectSoundsView_Previews: PreviewProvider { 68 static var previews: some View { 69 /*@START_MENU_TOKEN@*/Text("Hello, World!")/*@END_MENU_TOKEN@*/ 70 } 71} 72
補足情報(FW/ツールのバージョンなど)
Swift5 / Xcode13.1
static メソッドではインスタンス変数は使えません。
https://teratail.com/questions/86639
ご教示有難うございます!!なるほど、だからこのstatic内ではエラーが出てしまっていたのですね;;
どうしても変数を持ってきて中の値を書き換えて使いたいのですが、単純にstatic を classに置き換えてもエラーが発生してしまいました…(他の部分と干渉してしまっているのかも??) 何か解決策や代替案などの可能性などはありませんでしょうか?
単純に static func をただの func にすれば良いだけでは…。
(修正します!)
1か所、staticを外し忘れていました(-_-;)
ご教示のとおりエラーがすべて消え去りました!ありがとうございます!
回答1件
あなたの回答
tips
プレビュー