1. 程式人生 > 其它 >智汀家庭雲-iOS端:業務功能【場景篇】

智汀家庭雲-iOS端:業務功能【場景篇】

【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)
        }
}