Я создал фиктивное приложение IOS, чтобы хорошо объяснить мои вопросы.Позвольте мне поделиться этим со всеми деталями:
- В этом фиктивном приложении для IOS есть 2 страницы: LoginPageViewController.swift и HomepageViewController.swift
- Значения идентификатора раскадровки: LoginPage, Homepage.
- На странице входа есть кнопка входа.
- На домашней странице 3 ярлыка.
- Приложение запускается со страницы входа.
- И у меня есть файл класса: UserDetail.swift
- И есть один переход со страницы входа на домашнюю страницу.Идентификатор segue: LoginPage2Homepage
Файл UserDetail.swift
import Foundation
class UserDetail {
var accountIsDeleted = false
var userGUID : String?
var userAge: Int?
}
Файл LoginPageViewController.swift
import UIKit
class LoginPageViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func loginButtonPressed(_ sender: UIButton) {
var oUserDetail = UserDetail()
oUserDetail.accountIsDeleted = true
oUserDetail.userAge = 38
oUserDetail.userName = "Dirk Kuyt"
UserDefaults.standard.set(oUserDetail, forKey: "UserCredentialUserDefaults")
UserDefaults.standard.synchronize()
performSegue(withIdentifier: "LoginPage2Homepage", sender: nil)
}
}
HomepageViewController.swift file
import UIKit
class HomepageViewController: UIViewController {
var result_userGUID = ""
var result_userAge = 0
var result_isDeleted = false
@IBOutlet weak var labelUserGuidOutlet: UILabel!
@IBOutlet weak var labelAgeOutlet: UILabel!
@IBOutlet weak var labelAccountIsDeletedOutlet: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.setVariablesFromUserDefault()
labelUserGuidOutlet.text = result_userGUID
labelAgeOutlet.text = String(result_userAge)
labelAccountIsDeletedOutlet.text = String(result_isDeleted)
}
func setVariablesFromUserDefault()
{
if UserDefaults.standard.object(forKey: "UserCredentialUserDefaults") != nil
{
// I need a help in this scope
// I have checked already: My UserDefault exists or not.
// I need to check type of the value in UserDefault if UserDefault is exists. I need to show print if type of the value in UserDefault is not belongs to my custom class.
// And then i need to cast UserDefault to reach my custom class's properties: userGUID, userAge, isDeleted
}
else
{
print("there is no userDefault which is named UserCredentialUserDefaults")
}
}
}
Мои цели:
- Я хотел бы сохранить образец пользовательского класса (
oUserDetail
) в UserDefaults в LoginPageViewController с действием нажатия кнопки входа в систему. - Я хотел бы проверить ниже на домашней странице в качестве первой задачи: мой UserDefault существует или нет (я уже сделал это)
- Я хотел бы проверить это на домашней странице в качестве второй задачи: если мой UserDefault существует,А затем проверьте тип значения UserDefault.Это создано с моим пользовательским классом?Если это не так.print («значение userdefault не создано с вашим классом»)
- Третье задание: если UserDefault создан с моим пользовательским классом.А затем проанализируйте это значение.Задайте эти 3 переменные:
result_userGUID
, result_userAge
, result_isDeleted
, чтобы они отображались в метках.
Я получаю сообщение об ошибке после нажатия кнопки входа на странице входа.Не могу ли я сохранить свой собственный класс в UserDefaults?Мне нужно иметь возможность сохранять, потому что я вижу эту деталь во время написания:
UserDefaults.standart.set(value: Any?, forKey: String)
Мой пользовательский класс находится в области Any
выше.Не правда ли?