下面是前篇文章 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()
}
}
梦想还是要有的,万一实现不了呢? ....那起码你到死之前都还有梦想
>>: 卡夫卡的藏书阁【Book8】- Kafka 手动重新选举 Partition Leader
DAY15 MongoDB Explain 效能分析工具 针对资料库内的资料进行查询、新增、删修都需...
终於进入NodeJS中最为人知的套件管理系统NPM了,不讳言的当初对NodeJS一知半解的我对於No...
运用模组cv2 Pillow HAAR特徵档 在一张图片上(虚拟网红脸),标记框示人脸,并每人存成一...
Terraform 前言 今天介绍一下可以快速建立GCP各服务的套件Terraform,那麽Terr...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 嗨!我是卯郁,去年就立志今年要参加...