Swift学习记录 -- 13.类的构造方法及属性监听

Swift iOS开发实战:从ARC内存管理到App Store审核避坑指南 Swift作为iOS开发的核心语言,其价值远不止类型安全与语法简洁——它深度耦合UIKit生命周期、ARC内存模型与结构化并发机制。理解Optional如何根治空值崩溃、Result与async/await如何重构异步错误处理、@StateObject与@Binding如何划定状态边界,是构建高稳定性App的基础。尤其在真实生产环境中,内存泄漏、SIGABRT崩溃、网络超时、Preview预览失败等高频问题,本质都源于对Swift与iOS平台协同逻辑的误读。本文聚焦Swift在UIKit和SwiftUI双栈 阅读详情

类的构造方法原理和OC差不多 , 只是属性手动赋值时 , 有些麻烦 , 也有些难以理解 , 不过幸好有KVC , 解决了大部分问题 . 至于属性观察 , 调用的方法想必也不陌生 , 不错 , 正是OC中咱们重写KVO set方法里的那两个方法(willChange和didChange) , 只是名字有所变化


        //1.在创建对象时, 实质上已经是调用了构造函数
        let p = Person()

        //2.初始化一个对象时就对其进行赋值
        let p1 = Person(age: 18, name: "my")

        //3.传入字典进行对象初始化(手动赋值)
        let p2 = Person(dict: ["name":"my","age":18,"height":1.88])

        //4.传入字典进行对象初始化 (KVC赋值)
        let p3 = Person(dict1: ["name":"my","age":18,"height":1.88])


        //属性监听器
        let dog = Dog(dict2: ["name":"ahuang","age":3])
// person类
class Person :NSObject {

    var age :Int = 0
    var name :String? = nil

    //1.重写构造函数  //需要加上override
    override init() {

        super.init() //构造函数中,如果不调用父类构造函数,系统会自动调用,所以可写可不写
        print("---")
    }

    //2.自定义构造函数1 (初始化对象时就进行复制)
     init(age:Int,name :String) {

        self.age = age  //虽然可以直接获取age,但是为了区分,需要加上self
        self.name = name
    }

    //3.自定义构造函数2 (参数为字典)
    init(dict:[String:AnyObject]) {

        //注意:从字典中取出的值["name"]等为可选类型,因为取出的值是不确定的,有可能值不为空,也有可能为nil,所以写法如下

        // as? 最终转换成的类型是一个可选类型
        // as! 最终转换成的类型是一个确定类型

        //这里没必要进行是否为空判断,因为对可选类型进行取值时,一定会进行判断
            name = dict["name"] as? String //name为可选类型,需要把dict["name"]AnyObject?转换成String可选类型进行赋值

        //不能直接取值进行赋值,因为["age"]为AnyObject?
        if let age = dict["age"] as? Int {
            self.age = age
        }
    }

    //4.自定义构造函数3 (KVC赋值,使用KVC会自动帮我们进行判断和转换 , 就跟OC里一样自动类型转换)
    init(dict1 : [String:AnyObject]) {

        super.init()
        setValuesForKeysWithDictionary(dict1)//调用KVC必须要先调用父类构造方法,可以不可以省略了, 因为给对象赋值,必须要先保证对象已经被创建出来
    }

    //重写undefineKey方法 , 防止找不到对应的键进行赋值崩溃 (跟OC一样)
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        //不进行任何操作
    }
}
// Dog类 (属性变化监听)
class Dog: NSObject {

    var age = 0 { //直接在属性后面加{},写willSet和didSet对属性进行监听

        //属性即将改变时监听
        willSet {
            print("旧值:\(age)") //此处存在一临时变量 newValue(系统产生)
        }
        //属性已经改变时监听
        didSet {
            print("新值:\(age)")//此处存在一临时变量oldValue(系统产生)
        }   
    }
    var name:String? = nil

    //自定义构造函数
    init(dict2 : [String :AnyObject]) {

        super.init()
        setValuesForKeysWithDictionary(dict2)
    }
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
    }
}
从开源Kadō项目学习SwiftUI与Combine构建iOS习惯追踪应用 在iOS应用开发中,SwiftUI作为苹果主推的声明式UI框架,与Combine响应式编程框架共同构成了现代应用架构的核心。它们通过数据驱动视图更新,简化了状态管理,提升了开发效率。这种架构模式尤其适用于需要实时数据同步和复杂交互的应用,例如习惯追踪类工具。通过分析一个具体的开源项目——Kadō,开发者可以直观地学习如何将SwiftUI的视图组件、Combine的数据流与MVVM模式结合,实现从模型定义、视图模型逻辑到数据持久化(如使用SwiftData)的完整闭环。Kadō项目清晰地展示了如何利用@Pub 阅读详情

相关推荐

Mac本地跑Qwen9B:oMLX实现零命令行Metal原生推理

大语言模型本地部署的核心挑战在于运行时环境复杂性与硬件加速适配性。Metal作为Apple Silicon的原生GPU计算框架,提供了低开销、高确定性的张量运算能力,但传统Python生态(如PyTorch/llama.cpp)难以绕过解释器瓶颈与内存管理开销。oMLX通过Swift编译+MPSGraph静态图优化,将Qwen系列GGUF模型直接编译为Metal Shader,实现无Python、无终端、无配置的原生macOS应用体验。其技术价值在于将LLM推理压缩为单进程IPC通信,显著降低首token延

weixin_34384681的博客 448

Swift中给指定view添加单击监听和长按监听

本文主要内容如何给指定View添加单击监听和长按监听,由于在项目中使用到了这方面的知识,故

qq_46535000的博客 1045

swift-系统返回按钮事件拦截Swift版本

系统返回按钮事件拦截 Swift 版本

swift 属性监听器,监听属性变化

import UIKit //属性监听器本质是闭包 class Person: NSObject{ var name:String? {//属性后面加一对大括号称为属性监听器 //属性即将进行改变时监听 willSet{ print("11111") print(newValue)//系统的临时变量,用来保

ZhengYanFeng1989的博客 3533

ST MotorControl Workbench 6.2.1 自定义硬件配置避坑指南

本文详细介绍了ST MotorControl Workbench 6.2.1在自定义硬件配置中的常见问题与解决方案,涵盖功率板配置、采样电路校准、电机参数设置及代码生成避坑指南,帮助开发者高效完成电机控制项目开发。

red88的博客 1023

华为防火墙双ISP出口实战:如何用策略路由实现电信联通流量自动切换(附配置截图)

本文详细解析了华为防火墙在双ISP环境下的智能选路技术,通过策略路由与健康检测的深度应用,实现电信联通流量的自动切换。文章包含实战配置截图,帮助企业解决切换延迟、路径劣化等核心挑战,提升业务连续性。

backprop5master的博客 643

swift之类的继承、父类方法重写、属性值监听

基类(Base Class)被子类(Subclassing)继承,这个OC的继承思想很相似,唯一的不同就是语法的规范不一样。 1、新建一个基类 首先我们新建一个基类(Vehicle)声明一个属性(currentSpeed), 一个只读计算型属性(description), 在基类中定义一个方法makeNoise(): import UIKit class Vehicle {

启程的博客 2711

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法

问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 很久没用这台电脑的mysql了,今天需要连接数据库,启动数据库报错: ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 解决方法: 查阅资料后知道了,应该使用已知的用户名和密码登陆 mysql -u root -p 然而密

一个超会写Bug的程序猿的博客 43万+

Swift Notification event 监听事件

swift 增加监听事件 event 1.先增加一个拓展类 extension NotificationCenter { func reinstall(observer: NSObject, name: Notification.Name, selector: Selector) { NotificationCenter.default.removeObserver(observer, name: name, object: nil) NotificationCent

qq_36411120的博客 634

电赛MSP430F5529之超声波测距+OLED 显示(含主要代码)

目录 前言 一、超声波介绍 二、部分代码 三、总结 题外话: 前言 哎,又双叒叕,电赛延期了,看起来像是遥遥无期,但是肯定要考虑大局,大家就继续抓紧时间学习知识,巩固自己的知识,更进一步。好了,今天主要是继承上一篇博文(OLED显示)写的,主要是写超声波测距的(US-015) 一、超声波介绍 利用TI公司的MSP430F5529单片机+超声波模块+OLED 实现 这里主要是利用单片机定时器的捕获功能来捕获超声波高电平持续时间,再计算得到距离,最后再在OLED 屏幕上显示出来,上图

不说二话的自家人的博客 1万+

论文必备 - YOLOv12热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv12热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 1706

从OC到Swift的快速实践

本文是参考这篇博客, 里面的内容 ,我用playground实践了一遍,记录自己的理解和思考. 一. 数据 swift是数据安全类型, 不存在隐式转换. 类型转换标识符: is: 一个实例是否是某一种类型 as: 将实例转换成某一种类型(子类型 -> 父类型) as?: 将某个类型转成可选类型, 通过判断可选类型是否有值,来决定是否转化成功 as!: 转成具体的类型,如果不...

xfy6238的博客 478

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1241

10个实用技巧:使用Swift Perception优化你的SwiftUI性能

你是否在为SwiftUI应用的性能问题而烦恼?想要在不升级到最新iOS版本的情况下享受Swift 6的Observable特性吗?今天,我将为你介绍一个强大的工具——Swift Perception,它能够帮助你在旧版iOS平台上获得现代化的状态管理体验,同时显著提升应用性能!🚀 Swift Perception是一个向后兼容的观察工具库,它将Swift 6的`@Observable`功能带回

gitblog_00484的博客 656

Android 13 灭屏音乐播放问题解决与优化建议

通过在中增加对音乐播放状态的检测,我们成功解决了客户应用在灭屏状态下音乐播放被中断的问题。

m0_60898338的博客 1157

第78章:PCL Multiple View ICP 多视角配准

多视角配准(Multiple View ICP)是迭代最近点(ICP)算法的扩展,旨在处理多视角的点云数据配准问题。传统的ICP算法主要用于两幅点云之间的配准,而多视角配准则处理来自多个视角或不同时间采集的多个点云数据的配准任务。在实际应用中,多个传感器或多个拍摄角度获得的点云数据常常需要进行联合配准。这些点云可能由于不同的视角、拍摄位置或时间差异而存在位置和旋转的差异。多视角配准的目标是根据多个点云之间的匹配关系,找到它们的相对变换,使得这些点云能够合并成一个统一的三维模型。

yumeiguo的博客 158

【Swift版】怎么样创建一个像RunKeeper一样的App(一)

【Swift版】怎么样创建一个像RunKeeper一样的App(一)

qq_33777090的博客 735

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

终极实时聊天应用:Quick-Chat 如何用 Swift 5 和 Firebase 构建无缝沟通体验

Quick-Chat 是一款基于 Swift 5 和 Firebase 的终极实时聊天应用,为 iOS 开发者提供了完整的聊天解决方案。这款应用不仅实现了文本消息的实时传输,还支持图片和位置分享功能,让沟通变得更加丰富和便捷。在前 100 字的介绍中,我们已经自然地融入了核心关键词:**实时聊天应用**、**Swift 5**、**Firebase**,这些技术组合构成了 Quick-Chat 的

gitblog_00042的博客 888

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Stillcolor开发者指南:如何为Apple Silicon Mac构建类似应用

如果你想为Apple Silicon Mac构建类似Stillcolor这样的系统级菜单栏应用,这篇开发者指南将为你提供完整的技术路线。Stillcolor是一个专门为Apple Silicon Mac设计的轻量级菜单栏应用,它能够禁用GPU/DCP生成的时间抖动(temporal dithering),帮助减轻眼睛疲劳。 ## 🚀 为什么需要这样的应用? 时间抖动是现代显示器中常见的技术,

gitblog_00050的博客 464

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Vision Transformer 训练与微调怎么做:5 步跑通的完整指南

这篇文章带你跑通 Vision Transformer 训练与微调的完整流程:预训练超参数、AugReg 数据增强策略、微调学习率设置与预训练权重加载,帮你第一次就能复现可用的"预训练 + 微调"链路。 ## 为什么 ViT 要先预训练、再微调? 把这套范式想象成大学教育。预训练像通识教育:模型在 ImageNet-21k 的海量图片上学习辨认边缘、纹理、形状,攒下一套通用的视觉常识;微调像读

gitblog_00859的博客 313

Swift与AppKit实战:打造macOS原生Markdown编辑器

Markdown作为一种轻量级标记语言,因其简洁的语法和易读性,已成为技术文档编写和内容创作的通用标准。其核心原理是通过特定符号标记文本结构,再通过解析器转换为HTML等格式。在macOS平台上,原生应用开发能提供最佳的系统集成和性能体验。通过Swift语言结合AppKit框架,开发者可以深度利用NSTextView等原生组件,实现如行内实时预览等高级功能,从而构建出体验流畅、与系统深度整合的专业工具。本文聚焦于如何运用Swift和AppKit,从零开始实现一个具备行内实时预览功能的macOS原生Markd

weixin_34344403的博客 431

面向对象编程:类与对象核心概念与实践指南

面向对象编程(OOP)是现代软件开发的核心范式,其基础在于类与对象的概念。类作为对象的模板,定义了数据属性和方法行为;对象则是类的具体实例,封装了状态和行为。通过封装、继承和多态三大特性,OOP实现了代码复用、模块化和扩展性。在Java、Python等主流语言中,类与对象机制支撑了从基础业务逻辑到Spring框架、设计模式的广泛应用。理解类与对象的关系对于掌握SOLID设计原则、实现高内聚低耦合的代码结构至关重要,也是学习设计模式和框架开发的基础。本文通过具体代码示例,深入解析类与对象在封装性、内存管理、多

weixin_30947043的博客 343

HarmonyOS 6.1 实战:toggleLike方法会创建一个新的FigureModel实例并翻转其liked属性

引言在当今移动互联网生态中,潮玩盲盒社区已经成为年轻消费群体高度活跃的垂直社交场景。从POP MART到52TOYS,从线上抽盒到二手交易,整个潮玩产业链正在经历从线下实体向线上数字化的快速迁移。HarmonyOS 6.1.1作为华为全场景智慧生活操作系统的最新迭代版本,其ArkTS声明式UI框架在HarmonyOS ArkTS API 24阶段已经发展得极为成熟,为开发者提供了从类型系统、状态管理到组件化构建的一整套现代化前端开发范式。本文将以一个完整的潮玩盲盒社区单文件页面应用为例,深入剖析基于Harm

2501_92985290的博客 5123

SwiftUI实战:从零构建macOS剪贴板历史工具与Homebrew分发

在macOS应用开发中,系统剪贴板是提升工作效率的核心组件之一。其底层通过AppKit框架的NSPasteboard API进行访问,开发者可以监听剪贴板变化,实现历史记录、快速检索等增强功能。这项技术对于需要频繁处理文本和代码片段的用户具有重要价值,能显著优化复制粘贴的工作流。结合SwiftUI这一现代化的声明式UI框架,开发者可以高效构建出兼具美观与实用性的原生应用。本文以构建一个轻量级、无订阅的剪贴板历史管理工具为例,详细阐述了从核心功能设计、数据持久化到全局快捷键集成的完整工程实践。项目采用Vibe

weixin_34347651的博客 403

gsd-core 修复 `/gsd-code-review` 解析阶段 SUMMARY 文件的 Shell 语法注入问题:字面 heredoc 与 argv 传参的防注入设计

本文围绕 gsd-core 仓库中 `.changeset/safe-herons-parse.md` 记录的缺陷修复(类型 `Fixed`,PR #4533,对应 issue #4461)展开:`/gsd-code-review` 命令在执行阶段代码评审时,需要从阶段的 `*-SUMMARY.md` 中解析出 `key-files.created` / `key-files.modified`

gitblog_00710的博客 307

如何用CardsAgainst快速打造P2P桌游:事件协议与架构复用完整指南

CardsAgainst 是一款基于 iOS 原生 MultipeerConnectivity 的 P2P(设备间直连)卡牌对战游戏,由 Swift 编写。它不需要任何服务器,几台 iPhone 靠近后就能开局——这套"事件协议 + 三层架构"的设计,是学习并复用 P2P 桌游开发的最佳模板。本指南将带你完整拆解它的架构,并告诉你如何基于它开发自己的 P2P 桌游。 [![CardsAgains

gitblog_00454的博客 1082
上一篇: Swift学习记录 -- 12.类的定义及属性
下一篇: Swift学习记录 -- 14.闭包的使用和解决循环引用方法
coderMy
博客等级 码龄10年 43粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值