SwiftUIでUserDefaultsの読み書きについて
解決したいこと
SwiftUIでログインアプリを作成しています。
メイン画面を表示しデータの確認・修正を行います。
メイン画面を開く際にログインしていない場合(IDがない場合)、ログイン画面を開きます。
IDは、UserDefaultsより参照して切り替えを考えています。
問題点
ログイン画面にて、「ログイン」ボタンタップ後に UserDefaultsへ保存し、メイン画面へ
メイン画面で、UserDefaultsからIDを取り出し、情報表示
となるはずなのですが、メイン画面でUserDefaultsでIDを取得するとデフォルト値に戻っています。
該当するソースコード
struct LoginView: View {
@State var inputEmail: String = ""
@State var inputPassword: String = ""
@State var isActiveSubView = false
var body: some View {
VStack(alignment: .center) {
NavigationLink(destination: MainView(),isActive: $isActiveSubView) {
EmptyView()
}
Button(action: {
loginCheck()
},
label: {
Text("Login")
.fontWeight(.medium)
.frame(minWidth: 160)
.foregroundColor(.white)
.padding(12)
.background(Color.accentColor)
.cornerRadius(8)
})
}
}
func loginCheck() {
print(inputEmail)
print(inputPassword)
if(inputEmail != nil){
}
if(inputPassword != nil){
}
let mainAPIHost: String = (URL)
var request = URLRequest(url: URL(string: mainAPIHost)!)
request.httpMethod = "GET"
var l_mId: Int = 0
var l_rKy: String = ""
var l_aKy: String = ""
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let jsonData = data else { return }
do {
//var name: memberInfo
let vitals = try JSONDecoder().decode(loginData.self, from: jsonData)
print(vitals)
loginTbl = vitals
loginTbl.forEach({(data) in
ID = data.member_id
AccKey = data.rekey
ResKey = data.acKey
})
if (l_mId > 0){
UserDefaults.standard.set(l_mId.description, forKey: "ADMIN_ID")
UserDefaults.standard.set(l_rKy, forKey: "ADMIN_RKEY")
UserDefaults.standard.set(l_aKy, forKey: "ADMIN_AKEY")
isActiveSubView = true
}
} catch {
}
}
}
struct MainView: View {
@State private var nameTbl = [nameInfo]()
@State var isOnSendUserData = false
@State var Id: String = UserDefaults.standard.string(forKey: "ADMIN_ID") ?? "0"
var body: some View {
if (Id == "0"){
LoginView()
}else{
0