SwiftチュートリアルNo.5 Beginning iOS13&Swift App Development

今回は、Chapter4 ToDoList using CoreDataです。
この画面は、入力画面で優先順位をつけられます。
入力後は、TableViewにリスト表示され、リストを指定してクリックすると詳細画面に遷移します。
次回は、ToDoListに写真を追加することに挑戦します。
// ToDoTableViewController.swift
// ToDoList2
import UIKit
class ToDoTableViewController: UITableViewController {
var toDoCDs:[ToDoCD] = []
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
getToDos()
}
func getToDos(){
if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext {
if let toDosFromCoreData = try? context.fetch(ToDoCD.fetchRequest()){
if let toDos = toDosFromCoreData as? [ToDoCD]{
toDoCDs = toDos
tableView.reloadData()
}
}
}
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
let selectedToDo = toDoCDs[indexPath.row]
performSegue(withIdentifier: “moveToDetails”, sender: selectedToDo)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return toDoCDs.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
let selectedToDo = toDoCDs[indexPath.row]
if selectedToDo.priority == 1 {
if let name = selectedToDo.name{
cell.textLabel?.text = “❗️” + name
}
}
else if selectedToDo.priority == 2{
if let name = selectedToDo.name{
cell.textLabel?.text = “‼️” + name
}
}
else {
if let name = selectedToDo.name{
cell.textLabel?.text = name
}
}
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let addToDoViewController = segue.destination as?
AddToDoViewController{
addToDoViewController.toDoTableViewController = self
}
if let detailsToDoViewController = segue.destination as?
ToDoDetailsViewController{
if let selectedToDo = sender as? ToDoCD{
detailsToDoViewController.toDoCD = selectedToDo
}
}
}
}
// ToDoDetailsViewController.swift
// ToDoList2
import UIKit
class ToDoDetailsViewController: UIViewController {
var toDoCD:ToDoCD? = nil
@IBOutlet weak var toDoLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
if let toDo = toDoCD{
if toDo.priority == 1{
if let name = toDo.name{
toDoLabel.text = “❗️” + name
}
}
else if toDo.priority == 2{
if let name = toDo.name{
toDoLabel.text = “‼️” + name
}
}else{
if toDo.name != nil{
toDoLabel.text = toDo.name
}
// Do any additional setup after loading the view.
}
}
}
@IBAction func doneTapped(_ sender: Any) {
if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext{
if let toDo = toDoCD{
context.delete(toDo)
}
(UIApplication.shared.delegate as? AppDelegate)?.saveContext()
}
navigationController?.popViewController(animated: true)
}
}
// AddToDoViewController.swift
// ToDoList2
import UIKit
class AddToDoViewController: UIViewController {
var toDoTableViewController:ToDoTableViewController? = nil
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var prioritySegment: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func addTapped(_ sender: Any) {
if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
{
let newToDo = ToDoCD(context: context)
newToDo.priority = Int32(prioritySegment.selectedSegmentIndex)
if let name = nameTextField.text{
newToDo.name = name
}
(UIApplication.shared.delegate as? AppDelegate)?.saveContext()
}
navigationController?.popViewController(animated: true)
}
}