智汀家庭云-iOS端:业务功能【场景篇】

本文介绍了智汀家庭云iOS应用中关于场景的功能,包括如何添加场景(EditSceneViewController.swift),场景的手动执行和自动开启/关闭(SceneCell.swift和SceneViewController.swift),以及使用闭包结果回调进行控制。同时,详细阐述了编辑场景的实现,通过枚举值SceneType在EditSceneViewController.swift中切换UI和操作。此外,还提到了删除场景的处理方式。
摘要由CSDN通过智能技术生成

【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)
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值