Swift学习笔记39-实战注意事项

注意事项:

  • 注意:一些需要释放的页面,尽量避免调用全局变量!!!

  • Cell的事件就比如didselect是在最下面一层,要是上面有其他uicontrol或者uibutton会把事件抢走!!!

  • 能调用系统API的地方尽量调用系统的API,不要自己写!!!就比如TableView里的didSelect是控制点击事件的,需要点击整块Cell的时候,直接用这个函数就好了。

  • 千万不要使用AutoLayout,非常多问题!实在不行就用SwiftUI嵌套

  • 本地化文本不要设置comment内容

  • 数组越界是一个大问题,千万要注意⚠️就比如现在要用第五位,必须先确保第五位存在。

  • 分割字符串后使用map映射到一个数组中的API

    swift 复制代码
    import Foundation
    
    let str = "apple,banana,orange"
    
    // components 直接返回 [String] 数组
    let result: [String] = str.components(separatedBy: ",")
                              .map { $0.capitalized }
    
    print(result) 
    // 输出: ["Apple", "Banana", "Orange"]
  • TableView的Cell高度控制,最好还是用一个Cell内的函数来控制高度和内部元素的变化,然后再在渲染cell的时候使用它,不然会出很多Bug。而控制状态的bool变量最好是在TableView的VC里,有多个Cell最好分别存储它们的状态, 就像Bool

  • 为了避免史山代码的形成,没有使用过,也不从未上线的代码,就将其删除。注意,曾在线上版本里使用过的代码绝对不可以删除,注释掉就好了。

  • 避免在重用机制下使用临时变量,就比如TableView

    tableView.reconfigureRows(at: [indexPath])

    就比如这个,可能会出未知的问题,既然弱引用了Self,后面刷新的时候就继续用self引用其他组件就好了。

    swift 复制代码
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let base = baweiQABases[indexPath.row]
            let isExpanded = isExpandeds[indexPath.row]
            let cell: BaweiQACell = tableView.cellForRow(at: indexPath) as? BaweiQACell ?? BaweiQACell(style: .default, reuseIdentifier: "BaweiQACell")
            cell.question_content_label.text = base.questions
            cell.answers_content_label.text = base.answers
    //        cell.answers_content_label.setLineHeight(24)
            
            let q_size = YK_Toast.getStrSize(text: base.questions, font: .systemFont(ofSize: 14), size: .init(width: SCREENWIDTH - 64, height: 600))
    //        let a_size = YK_Toast.getStrSize(text: base.answers, font: .systemFont(ofSize: 14), size: .init(width: SCREENWIDTH - 64, height: 600))
            let a_size = YK_Toast.getStrSize(text: base.answers, font: .systemFont(ofSize: 14), size: .init(width: SCREENWIDTH - 64, height: 1000), lineSpacing: 4)
            let expanded_false_backView_size: CGRect = .init(x: GAP_16, y: 0, width: SCREENWIDTH - GAP_32, height: 16 + 30 + 8 + q_size.height + 16 + 0.5 + 16 + 18 + 16)
            let expanded_true_backView_size: CGRect = .init(x: GAP_16, y: 16 + 30 + 8 + q_size.height + 24 + 30 + 8 + a_size.height + 16 + 0.5 + 16, width: SCREENWIDTH - GAP_32, height: 16 + 30 + 8 + q_size.height + 16 + 0.5 + 16 + 18 + 16 + (24 + 30 + 8 + a_size.height))
            
            cell.selectionStyle = .none
            cell.backgroundColor = .clear
            cell.question_content_label.frame = .init(x: 16, y: 16 + 30 + 8, width: SCREENWIDTH - 64, height: q_size.height)
            cell.backView.frame = expanded_false_backView_size
            cell.dividerView.frame = .init(x: 16, y: 16 + 30 + 8 + q_size.height + 16, width: SCREENWIDTH - 64, height: 0.5)
            cell.expend_answer.frame = .init(x: 16, y: 16 + 30 + 8 + q_size.height + 16 + 16, width: SCREENWIDTH - 64, height: 18)
            cell.configure(with: isExpanded, q_size: q_size, a_size: a_size)
            cell.clickBlock = { [weak self] in
                self?.isExpandeds[indexPath.row] = !isExpanded
    //            tableView.reconfigureRows(at: [indexPath])
                self?.homeScroll.reloadRows(at: [indexPath], with: .automatic)
                #warning("3.5修改")
                //尽量避免在重用机制的条件下使用临时变量
            }
            return cell
        }
  • 做展开收起效果,做到操作后实时刷新TableVIew高度的API

    主要有这两个
    1.

    swift 复制代码
    self?.homeScroll.reconfigureRows(at: [indexPath])
    swift 复制代码
    self?.homeScroll.reloadRows(at: [indexPath], with: .automatic)
相关推荐
ab1237688 分钟前
Spring Integration 完整笔记 + 和 spring-integration-mqtt、Paho、EMQX 的关系
java·笔记·spring
li星野17 分钟前
【学习记录】立创EDA专业版核心概念全解析:数据整理、设计验证与器件四层模型
学习
知识分享小能手21 分钟前
C学习教程,从入门到精通,C语言输入和输出(4)
c语言·开发语言·学习
ACP广源盛1392462567326 分钟前
Type-C 扩展坞方案选型笔记|国产 DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP 评估
开发语言·笔记·硬件架构·硬件工程·hdmi·国产芯片
旖旎夜光31 分钟前
【LangGraph实战】LangGraph 学习笔记(四):持久化——从线程记忆到跨会话长期记忆
人工智能·笔记·python·学习·ai编程·langgraph
kdxiaojie1 小时前
MPU6050学习
笔记·学习·mpu6050
风骏时光牛马1 小时前
数据可视化管理平台
前端
仿生狮子6 小时前
OpenAI 攻下千禧年难题之后,开发者似乎无动于衷
前端·数学·vibecoding
Lvan的前端笔记9 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker