暑期项目开发实训 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亩的产业园。