-2
ToDo Listアプリケーションを作成しています。リストの項目が完了したことを示すためにスイッチの選択肢とスイッチがオンになった日付を保存できるようにしたい。私は配列が格納されているが、私は日付とスイッチを保存する方法を把握することはできません。私は今、最初のアイテムを見せているに過ぎません。ここでスワイプでスイッチの値と日付を保存する方法4
は私ToDoListManagerです:
import Foundation
class ToDoListManager {
private static let userDefaults = UserDefaults.standard
private static let listKey = "ToDoListKey"
var toDoItems: [ToDoItem]
var completedSwitch: Bool
init() {
self.toDoItems = ToDoListManager.retrieve() ?? [ToDoItem]()
//* I don't know how to initialize my completedSwitch
/* self.completedSwitch =
*//
}
func getItems() -> [ToDoItem] {
return self.toDoItems
}
func numberItems() -> Int {
return self.toDoItems.count
}
func addItem(item: ToDoItem) {
self.toDoItems.append(item)
ToDoListManager.store(items: self.toDoItems)
}
func removeItem(index: Int) {
self.toDoItems.remove(at: index)
}
func getFirstItem() -> ToDoItem? {
return self.toDoItems.first
}
func getDateCompleted() -> Bool {
if completedSwitch == true{
return true;
} else {
return false;
}
}
private class func store(items:[ToDoItem]) {
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(items) {
userDefaults.set(encoded, forKey: listKey)
}
userDefaults.synchronize()
}
private class func retrieve() -> [ToDoItem]? {
if let items = userDefaults.value(forKey: listKey) as? Data {
let decoder = JSONDecoder()
if let objectsDecoded = try? decoder.decode(Array.self, from:
items) as [ToDoItem] {
return objectsDecoded
}
else {
return nil
}
}
else {
return nil
}
}
}
マイVC:
import UIKit
class DetailViewController: UIViewController {
@IBOutlet weak var descriptionLabel: UILabel!
@IBOutlet weak var dateAddedLabel: UILabel!
@IBOutlet weak var completed: UISwitch!
@IBOutlet weak var dateCompletedLabel: UILabel!
@IBAction func completedSwitch(_ sender: UISwitch) {
if sender.isOn {
dateCompletedLabel.isHidden = true
}
else {
dateCompletedLabel.isHidden = false
}
}
var toDoItem: ToDoItem! {
didSet(newItem) {
self.refreshUI()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
refreshUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func refreshUI() {
if(toDoItem == nil) {
return
}
descriptionLabel?.text = toDoItem.itemDescription
completed.setOn(toDoItem.completed, animated: true)
dateAddedLabel?.text = toDoItem.getDateAdded()
dateCompletedLabel?.text = toDoItem.getDateCompleted()
}
}
あなたのスイッチに@IBActionを作成し、Date()とその値を保存するコードを置くことができますか? – GIJOW
s @ IBActionを追加すると、Bool型の値にメンバがありません.isOn –
変数Boolを作成しています... UISwitch型 '@IBAction func completedSwitch(_ sender:UISwitch)を使用する必要があります。 { – GIJOW