2017-11-27 5 views
-2

ToDo List 응용 프로그램을 만들고 있습니다. 목록에있는 항목이 완료되었음을 알리기 위해 스위치 선택을 저장하고 스위치가 켜져있는 날짜를 저장하려고합니다. 배열을 저장했지만 날짜와 스위치를 저장하는 방법을 알 수 없습니다. 지금은 첫 번째 항목 만 보여줄 것입니다.저장 방법 신속한 전환 값 및 날짜 4

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)를 사용해야합니다. {Sender.isOn}' – GIJOW

답변

-1

이 작품을 전환하는 방법을 단지 예입니다

여기 내 ToDoListManager입니다.

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