2017-11-27 13 views
-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() 
    } 
} 
+0

あなたのスイッチに@IBActionを作成し、Date()とその値を保存するコードを置くことができますか? – GIJOW

+0

s @ IBActionを追加すると、Bool型の値にメンバがありません.isOn –

+0

変数Boolを作成しています... UISwitch型 '@IBAction func completedSwitch(_ sender:UISwitch)を使用する必要があります。 { – GIJOW

答えて

-1

これは作品を切り替える方法を一例に過ぎません。

VC内の任意の場所でcompletedSwitch.isOnの値を取得することもできます。

@IBOutlet weak var descriptionLabel: UILabel! 
@IBOutlet weak var dateAddedLabel: UILabel! 
@IBOutlet weak var completedSwitch: UISwitch! 

@IBAction func completedSwitch(_ sender: UISwitch) { 

    if sender.isOn { 
     ///// do your stuffs if completed 
    } 
    else { 
     ///// do your stuffs if NOT completed 
    } 
} 

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 
    completedSwitch?.setOn(toDoItem.completed, animated: true) 
    dateAddedLabel?.text = toDoItem.getDateAdded() 
    } 
} 
+0

ダウン投票に感謝します。それで私はもう初心者の質問には何も答えません – GIJOW

関連する問題