智汀家庭雲-iOS端:業務功能【場景篇】
阿新 • • 發佈:2021-10-09
【1】新增場景
- 建立場景:EditSceneViewController.swift
private func createScene() {
guard let name = inputHeader.textField.text else { return }
if name == "" {
showToast(string: "場景名稱不能為空".localizedString)
return
}
if scene.scene_conditions.count == 0 {
showToast(string: "請先新增條件".localizedString)
return
}
if scene.scene_tasks.count == 0 {
showToast(string: "請先新增執行任務".localizedString)
return
}
scene.name = name
/// 執行條件
if scene.scene_conditions.first?.condition_type == 0 { // 手動
scene.auto_run = false
} else { // 自動
scene.auto_run = true
if self.conditionHeader.conditionRelationshipType == .all { // 滿足所有條件
scene.condition_logic = 1
} else { // 滿足任一條件
scene.condition_logic = 2
}
if scene.time_period == nil {
scene.time_period = 1
let format = DateFormatter()
format.dateStyle = .medium
format.timeStyle = .medium
format.dateFormat = "yyyy:MM:dd HH:mm:ss"
if let startTime = format.date(from: "2000:01:01 00:00:00")?.timeIntervalSince1970 {
scene.effect_start_time = Int(startTime)
}
if let endTime = format.date(from: "2000:01:02 00:00:00")?.timeIntervalSince1970 {
scene.effect_end_time = Int(endTime)
}
scene.repeat_type = 1
scene.repeat_date = "1234567"
}
}
/// 請求介面
saveButton.selectedChangeView(isLoading: true)
ApiServiceManager.shared.createScene(scene: scene.transferedEditModel) { [weak self] response in
self?.showToast(string: "建立成功".localizedString)
self?.navigationController?.popViewController(animated: true)
} failureCallback: { [weak self] (code, err) in
self?.showToast(string: err)
self?.saveButton.selectedChangeView(isLoading: false)
}
}
【2】場景控制
場景的控制,包括手動場景的執行、自動場景的開啟/關閉。
- 執行、開啟/關閉場景:SceneCell.swift
private func updateAction(_ isOn:Bool,_ isAuto: Bool) {
ApiServiceManager.shared.sceneExecute(scene_id: self.currentSceneModel!.id, is_execute: isOn) {[weak self] respond in
guard let self = self else {
return
}
if respond.success {
if isAuto {
self.executiveBtn.selectedChangeView(isLoading: false)
self.executiveCallback!("自動執行\(isOn ? "開啟":"關閉")成功")
}else{
self.executiveBtn.selectedChangeView(isLoading: false)
self.executiveCallback!("手動執行成功")
}
}
} failureCallback: { code, err in
if isAuto {
//恢復狀態
self.switchIsOn = !self.switchIsOn
self.autoSwitch.switchIsOn = !self.autoSwitch.switchIsOn
//按鈕樣式恢復
self.executiveBtn.selectedChangeView(isLoading: false)
self.executiveCallback!("自動執行\(isOn ? "開啟":"關閉")失敗")
}else{
self.executiveBtn.selectedChangeView(isLoading: false)
self.executiveCallback!("手動執行失敗")
}
}
}
- 閉包結果回撥:SceneViewController.swift
在delegate方法cellForRowAt內cell的閉包結果回撥
cell.executiveCallback = {[weak self] result in
guard let self = self else {
return
}
//提示執行結果
self.showToast(string: result)
//重新重新整理列表,更新執行後狀態
self.requestNetwork()
}
【3】編輯場景
-
列舉定義:SceneType
編輯場景:EditSceneViewController.swift編輯場景與建立場景共處一個控制器,通過列舉值切換UI及執行操作編輯場景與建立場景共處一個控制器,通過列舉值切換UI及執行操作
enum SceneType {
case edit
case create
}
編輯場景與建立場景共處一個控制器,通過列舉值切換UI及執行操作
private func editScene() {
guard let id = scene_id else { return }
guard let name = inputHeader.textField.text else { return }
if name == "" {
showToast(string: "場景名稱不能為空".localizedString)
return
}
if scene.scene_conditions.count == 0 {
showToast(string: "請先新增條件".localizedString)
return
}
if scene.scene_tasks.count == 0 {
showToast(string: "請先新增執行任務".localizedString)
return
}
scene.name = name
saveButton.selectedChangeView(isLoading: true)
ApiServiceManager.shared.editScene(id: id, scene: scene.transferedEditModel) { [weak self] _ in
self?.showToast(string: "修改成功".localizedString)
self?.navigationController?.popViewController(animated: true)
} failureCallback: { [weak self] (code, err) in
self?.showToast(string: err)
self?.saveButton.selectedChangeView(isLoading: false)
}
}
4.刪除場景
- 刪除場景:EditSceneViewController.swift
private func deleteScene() {
guard let id = scene_id else { return }
tipsAlert?.isSureBtnLoading = true
ApiServiceManager.shared.deleteScene(id: id) { [weak self] response in
self?.tipsAlert?.removeFromSuperview()
self?.showToast(string: "刪除成功".localizedString)
self?.navigationController?.popViewController(animated: true)
} failureCallback: { [weak self] (code, err) in
self?.tipsAlert?.isSureBtnLoading = false
self?.showToast(string: err)
}
}