在加载带有文本字段和操作按钮的secondViewController时出现错误,因此用户可以用一些数字填充它并将其保存到UserDefaults
想法是能够返回secondVC,并在其中显示TextField的值与用户最初输入的值相同
class MainViewController: UIViewController {
@IBOutlet weak var A3TextField: UITextField!
@IBAction func calc(_ sender: Any) {
let A3 = Cell(name: "A3", sheet: "", value: Double(A3TextField.text!)!)
print(A3)
Cell.saveCellsUserDefaults(cells: [A3], forKey: "main")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
class SecondViewController: UIViewController {
@IBOutlet weak var B3TextField: UITextField!
@IBAction func calc2(_ sender: Any) {
let B3 = Cell(name: "B3", sheet: "", value: Double(B3TextField.text!)!)
print(B3)
// persist
Cell.saveCellsUserDefaults(cells: [B3], forKey: "second")
}
override func viewDidLoad() {
super.viewDidLoad()
// retrieve from persists and draw in TextField
let cellB3FromUD = Cell.getCellsUserDefaults(forKey: "second")
print("---> cellB3FromUD \(cellB3FromUD[0].value)")
B3TextField.text = "\(cellB3FromUD[0].value)"
}
}
struct Cell: Codable {
var name: String = ""
var sheet: String = ""
var value: Double = 0
init(name: String, sheet: String, value: Double) {
self.name = name
self.sheet = sheet
self.value = value
}
static func saveCellsUserDefaults(cells: [Cell], forKey: String) {
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(cells) {
let defaults = UserDefaults.standard
defaults.set(encoded, forKey: forKey)
}
}
static func getCellsUserDefaults(forKey: String)-> [Cell] {
var cells = [Cell]()
let decoder = JSONDecoder()
if let cellData = UserDefaults.standard.data(forKey: forKey) {
if let cellX = try? decoder.decode([Cell].self, from: cellData) {
cells = cellX
return cellX
}
}
return cells
}
}