暑期项目开发实训 Day7
来源:互联网 发布:域名紧急升级 编辑:程序博客网 时间:2024/05/29 13:06
今天是项目实训第一周的最后一天!终于提交了第二个demo!
另外发现之前写的git到bitbucket的步骤有误,重申一遍呢:
01: git init 初始化
02: git remote add origin http://XXXXXX (远程仓库地址)
03: git checkout -b your_branch_name (创建你的分支)
03: git add .
04: git commit -m “version_name” (提交版本)
05: git push -u origin your_branch_name (push到分支)
06: 输入密码(第二次可能就不用输入了)
07: 等待 直到出现 :Branch your_branch_name set up to track remote branch your_branch_name from origin
----------------------- 今天一口气完成了07 08 09 10 11 五个part,明天可以开始Demo3了-------------------------------------
由于CL迭代过程相当复杂,每一部分对上一部分的代码都做了大量修改,因此我仅记录每一章的主要矛盾
07 Multiple checklists
这一节主要是创建多个Lists,以期达到分类记录的效果。
每个List都管理属于自己的ListItem。
类比之前的 ChecklistItem,
我们有 Checklist. 完整代码如下:
import UIKitclass Checklist: NSObject ,NSCoding { var iconName: String var name = "" var items = [ChecklistItem]() // own array!! convenience init(name: String) { self.init(name: name, iconName: "No Icon")// self.name = name// iconName = "No Icon"// super.init() } init(name: String, iconName: String) { self.name = name self.iconName = iconName super.init() } required init?(coder aDecoder: NSCoder) { name = aDecoder.decodeObject(forKey: "Name") as! String items = aDecoder.decodeObject(forKey: "Items") as! [ChecklistItem] iconName = aDecoder.decodeObject(forKey: "IconName") as! String super.init() } func encode(with aCoder: NSCoder) { aCoder.encode(name, forKey: "Name") aCoder.encode(items, forKey: "Items") aCoder.encode(iconName, forKey: "IconName") } func countUncheckedItems() -> Int { var count = 0 for item in items where !item.checked { count += 1 } return count }}
08 Putting to-do items into the checklists
这一节主要是希望我们能够抽象出独立的数据模型。
从而实现checklists之间的独立。
因为之前所有的Checklists共享一批Item,这是不合理的。
我们专门创建了一个DataModel.swift,来包含Checklist对象数组。
之前load、save的代码都可以移植到DataModel中。
import Foundationclass DataModel { var lists = [Checklist]() init() { loadChecklists() registerDefaults() handleFirstTime() } ......}
09 Using UserDefaults to remember stuff
这一部分是为了记录退出App前的页面位置,以便从后台回到App时能恰好在之前所处的页面。
主要思想是:用Dictionary来记录页面位置的<Key, Value>对。
若位置值为 -1. 则为根目录。
注意到一个比较有趣的现象: Swift中用 == 表示值相等, 用 === 表示引用相等
//navigationController func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { // Was the back button tapped? // == 值相等 // === 引用相等 checking whether 2 vars refer to the exact same obj if viewController === self { dataModel.indexOfSelectedChecklist = -1// UserDefaults.standard.set(-1, forKey: "ChecklistIndex") } }
10 Improving the user experience
这一部分主要是为了提升用户体验。
一个Checklist,能够显示不同的完成状态:
1. (No items)
2. (X remaining)
3. ( All done!)
// cellForRowAt override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = makeCell(for: tableView) let checklist = dataModel.lists[indexPath.row] cell.textLabel!.text = checklist.name cell.accessoryType = .detailDisclosureButton let count = checklist.countUncheckedItems() if checklist.items.count == 0 { cell.detailTextLabel!.text = "(No Items)" } else if count == 0 { cell.detailTextLabel!.text = "All Done!" } else { cell.detailTextLabel!.text = "\(checklist.countUncheckedItems()) Remaining" } cell.imageView!.image = UIImage(named: checklist.iconName) return cell }
无疑会提高用户体验。
11 Local notifications
这一节是彻底的界面优化
一方面,为Item设置Remind Me开关 和 时间。
另一方面,为List设置Icon。
有以下Icon可供使用:
let icons = [ "No Icon", "Appointments", "Birthdays", "Chores", "Drinks", "Folder", "Groceries", "Inbox", "Photos", "Trips"]
---------------------------------完成项目后的可交付结果--------------------------------
1 可以创建多个Lists、设置Icon
2 每个List可以创建多个Item,设置提醒开关、提醒时间
3 List会显示未完成的任务项数
4 Item支持打勾
5 应用退出,在后台挂起时,当提醒时间到达,Home会出现消息推送。
以上就是第二个Demo的主要功能了!
-------------------------------------------------------最后记一下今天的讲座:
今天的讲座是DareWay公司的史总为我们讲解软件行业职业规划。
最后顺便宣讲了一下校园招聘。
DareWay公司目前在济南的待遇还不错,本科起薪7500,2020年将会拥有120亩的产业园。
- 暑期项目开发实训 Day7
- 暑期项目开发实训 Day1
- 暑期项目开发实训 Day2
- 暑期项目开发实训 Day3
- 暑期项目开发实训 Day4
- 暑期项目开发实训 Day4
- 暑期项目开发实训 Day5
- 暑期项目开发实训 Day6
- 暑期项目开发实训 Day8
- 暑期项目开发实训 Day9
- 暑期项目开发实训 Day9
- 暑期项目开发实训 Day10
- 暑期项目开发实训 Day11
- 暑期项目开发实训 Day12
- 暑期项目开发实训 Day13
- 暑期项目开发实训 Day14
- 暑期项目开发实训 Day15
- 暑期项目开发实训 Day16
- 前端面试整理<特别多,耐心看基础面试题部分基本没有问题了!!!>
- Coin Change
- 19.组合模式
- Linux日常——shell彩色进度条
- First Position Unique Character
- 暑期项目开发实训 Day7
- Android面试题记录
- 你必须要掌握的测试利器--TestNG
- 20.迭代器模式
- 51Nod-1967-路径定向
- React总结3:ES6下React组件的写法示例代码
- 经典错误一
- 震惊!原来String类是这样的(上)
- Qin Shi Huang's National Road System