iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
0

20191010

前言

今天的內容一樣是代辦清單,今天我們來將現有的代碼整理一下,以及某些細節調整。

現在,我們馬上開始!

練習紀錄

ToDoList清單編輯/新增畫面,加入收鍵盤功能

這邊參考ref9來加入收鍵盤的功能

  1. 首先在EditViewController加入對應的protocol
class EditViewController: UIViewController,
UITextFieldDelegate {
 // ...以下略
}
  1. 點選鍵盤的Return時,收鍵盤
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

  1. 加入點選畫面的空白處,收鍵盤
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}
  • 新增頁面的程式碼也差不多,這邊就不再介紹,請參考Github專案

程式碼整理

由於我們在開發的過程中,會遺留一些無效的註解,以及沒有用的程式碼。而且有些程式碼也重複了。
現在,我們來小小整理一下程式碼。

  1. 清除所有沒用到的註解 (如下圖)

  • 如果是被註解的程式碼(未來或許會用),請大膽的直接刪除,未來我們也可以從版控找回來

[EditViewController] 整理

  1. 首先整理一下viewDidLoad的區塊
override func viewDidLoad() {
    super.viewDidLoad()
    
    guard let content = todo?.content else { return }
    taskTextField.text = content
}
  • 將第四行與第五行的程式碼抽離成一個方法

  • 整理後如下

override func viewDidLoad() {
    super.viewDidLoad()
    
    configurationUI()
}

private func configurationUI() {
    guard let content = todo?.content else { return }
    taskTextField.text = content
}
  • 一般我們習慣會將private方法,整理到最下方

[ListViewController] 整理

  1. 一樣刪除沒有用到的程式碼 (註解區塊)

[ListTableViewController] 整理

  1. 一樣先刪除無用註解

  2. 整理viewDidLoad()內的程式碼

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self,
selector:
#selector(self.receivedNotification(notif:)),
name: NSNotification.Name(rawValue:
"editNotification"), object: nil)
}
  • 整理後的程式碼
override func viewDidLoad() {
    super.viewDidLoad()
    
    setNotificationCenter()
}

private func setNotificationCenter() {
    NotificationCenter.default.addObserver(self,
selector:
#selector(self.receivedNotification(notif:)),
name: NSNotification.Name(rawValue:
"editNotification"), object: nil)
}

Load Realm Data Method

接者我們發現到,程式碼中,散落者讀取Realm Data的代碼,現在我們將統一整理到一個RealmHelper中

  1. 新增一個Cocoa Touch Class檔案

  1. 命名為RealmHelper,並繼承自NSObject

  1. 直接按下『Create』

  2. 接下來我們直接把讀取Realm的程式碼搬過來,並調整一下

import UIKit
import RealmSwift
class RealmHelper: NSObject {
    class func loadToDoList() -> [ToDoList] {
        let realm = try! Realm()
        let result = Array(realm.objects(ToDoList.self).filter("status !=
'deleted'"))
        
        return result
    }
}

而原本讀取的地方,替換為

RealmHelper.loadToDoList()
  1. 新增的部分,也一併整理到RealmHelper內
class func addToDoList(todoList: ToDoList) {
    let realm = try! Realm()
            
    try! realm.write {
        realm.add(todoList)
    }
}
  1. 此時我們發現讀取時,會有需要用到其他filter的條件,因此,我們新增一個方法
class func loadToDoListWithFilter(filter: String) -> [ToDoList] {
    let realm = try! Realm()
    let result = Array(realm.objects(ToDoList.self).filter(filter))
    
    return result
}
  • 原本呼叫端的變化
// guard let realmTodo = realm.objects(ToDoList.self).filter("id ==
'\(id)' and status != 'deleted'").first else { return }

guard let realmTodo = RealmHelper.loadToDoListWithFilter(filter:
filter) .first else { return }
  1. 完成修改後,將原本的幾個功能做一下測試,確認都沒有問題

總結

今天我們實作了TodoList的收鍵盤功能,也優化以及重構了原有的代碼,讓整體看起來乾淨,舒服一些。

今天是10/10國慶日,中華民國~~~~生日快樂

隱藏祕技:『ctrl + cmd + space』
發現似乎無法顯示emoji,就改用貼圖拉

今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  2. iOS 12 App 開發快速入門與實戰(繁體中文)
    https://www.udemy.com/course/ios-12-app/

  3. 心智圖軟體Xmind
    https://www.xmind.net/

[Realm]

  1. [Swift] Realm.io 資料庫介紹 - 其之一:初探CRUD
    https://ithelp.ithome.com.tw/articles/10183329

  2. Auto increment ID in Realm, Swift 3.0
    https://stackoverflow.com/questions/39579025/auto-increment-id-in-realm-swift-3-0

  3. Realm Studio
    https://realm.io/docs/swift/latest/#realm-studio

[Notificationcenter]

  1. 客製化 NotificationCenter 讓你使用起來更簡單
    https://www.appcoda.com.tw/notificationcenter/

  2. Apple Developer NotificationCenter
    https://developer.apple.com/documentation/foundation/notificationcenter

  3. UITextField如何讓鍵盤消失?
    https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E6%95%99%E5%AE%A4/uitextfield%E5%A6%82%E4%BD%95%E8%AE%93%E9%8D%B5%E7%9B%A4%E6%B6%88%E5%A4%B1-37565fdb6b2f


上一篇
Day23 待辦清單 (5)
下一篇
Day25 實機測試
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言