[Day 07] 从简单的Todolist 了解 iOS开发的大致流程之二

下面是前篇文章 ViewController的程序码,我将用注解大概解释流程以及状况

关於@obj的解释以及参考:
简单来说就是 swift的程序码给 Object C 来使用,所以swift相关语言的特性就变成 Object C的特性

//
//  ViewController.swift
//  MyToDoList
//
//  Created by Afraz Siddiqui on 4/28/20.
//  Copyright © 2020 ASN GROUP LLC. All rights reserved.
//

import RealmSwift
import UIKit

/*
 - To show list of current to do list itmes
 - To enter new to do list items
 - To show previously entered to do list item

 - Item
 - Date
 */
//@objc 代表可能要用到 objective C的消息调用机制来
class ToDoListItem: Object {
    @objc dynamic var item: String = ""
    @objc dynamic var date: Date = Date()
}
//Declare that the class implements the table view datasource and delegate protocols.
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var table: UITableView!

    private let realm = try! Realm()//算是宣告realm这个常数实体
    private var data = [ToDoListItem]()//宣告ToDoListItem这个object的阵列或串列

    override func viewDidLoad() {
        super.viewDidLoad()
        data = realm.objects(ToDoListItem.self).map({ $0 })//将资料装入
        table.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        //tableview的绑定或注册
        table.delegate = self
        table.dataSource = self
        //连结资料来源以及 Table的委派指到 ViewController上,
    }

    // Mark: Table

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }
    // 表格的储存格设定
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row].item
        return cell
    }
    //delete 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        // Open the screen where we can see item info and delete
        let item = data[indexPath.row]

        guard let vc = storyboard?.instantiateViewController(identifier: "view") as? ViewViewController else {
            return
        }

        vc.item = item
        vc.deletionHandler = { [weak self] in
            self?.refresh()
        }
        vc.navigationItem.largeTitleDisplayMode = .never
        vc.title = item.item
        navigationController?.pushViewController(vc, animated: true)
    }
    //add
    @IBAction func didTapAddButton() {
        guard let vc = storyboard?.instantiateViewController(identifier: "enter") as? EntryViewController else {
            return
        }
        vc.completionHandler = { [weak self] in
            self?.refresh()
        }
        vc.title = "New Item"
        vc.navigationItem.largeTitleDisplayMode = .never
        navigationController?.pushViewController(vc, animated: true)
    }

    func refresh() {
        data = realm.objects(ToDoListItem.self).map({ $0 })
        table.reloadData()
    }

}


梦想还是要有的,万一实现不了呢? ....那起码你到死之前都还有梦想


<<:  Day 22 关键字跟 SEO

>>:  卡夫卡的藏书阁【Book8】- Kafka 手动重新选举 Partition Leader

DAY15 MongoDB Explain 效能分析工具

DAY15 MongoDB Explain 效能分析工具 针对资料库内的资料进行查询、新增、删修都需...

Day14 NodeJS-NPM I

终於进入NodeJS中最为人知的套件管理系统NPM了,不讳言的当初对NodeJS一知半解的我对於No...

Python cv2框示人脸 【基本】

运用模组cv2 Pillow HAAR特徵档 在一张图片上(虚拟网红脸),标记框示人脸,并每人存成一...

Terraform

Terraform 前言 今天介绍一下可以快速建立GCP各服务的套件Terraform,那麽Terr...

自动化测试,让你上班拥有一杯咖啡的时间 | Day 1 - 前言

此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 嗨!我是卯郁,去年就立志今年要参加...