Swift从0开始学习 对象和类 day3

news/2024/11/24 6:52:05/
  • 类(Class) 是一种类型或模板,描述了对象的特征和行为。
  • 对象(Object) 是类的实例,实际的实体,拥有自己的数据。

新入门的教学都喜欢用“人”来举例为类,在这里我也用“人”吧
 

//"人“这个类
class person {let type = "person"var name : String?var age : Int?func setName(name : String) -> String {self.name = namereturn "成功设置名字为\(name)"}func eat() {print("吃饭行为")}func sleep() {print("睡觉行为")}
}//对象(实例)
//人的实例就具体一个人嘛,就let,总不能你还能设置为别人对吧
let you : person = person()
//名字设置为帅哥
you.setName(name: "帅哥")

这里使用person()来实例化,但是如果需要自定义呢,比如初始化的时候需要传点参数对吧,这时候就需要构造函数。
 

//"人“这个类
class person {let type = "person"var name : Stringvar age : Int//参数的默认值就是帅哥、18init(name: String, age: Int) {self.name = nameself.age = age}func setName(name : String) -> String {self.name = namereturn "成功设置名字为\(name)"}func eat() {print("吃饭行为")}func sleep() {print("睡觉行为")}
}//对象
let you : person = person(name: "帅哥", age: 18)
print("你是\(you.name),年龄\(you.age)")
//输出:你是帅哥,年龄18

如果需要某个属性初始化就自带默认值的话,以身高tall为例,人均180。示例如下:
 


//"人“这个类
class person {let type = "person"var name : Stringvar age : Intvar tall : CGFloat?//参数的默认值就是帅哥、18init(name: String, age: Int, tall: CGFloat? = 180.0) {self.name = nameself.age = ageself.tall = tall}func setName(name : String) -> String {self.name = namereturn "成功设置名字为\(name)"}func eat() {print("吃饭行为")}func sleep() {print("睡觉行为")}
}//对象
let you : person = person(name: "帅哥", age: 18)
print("你是\(you.name),年龄\(you.age)," + "身高\(you.tall ?? 0.0)")
//输出:你是帅哥,年龄18,身高180.0

但是有些人行为是不一样的,通过实现person的子类来定义这些不一样的人。

class SpecialMan: person {override func eat() {print("顿顿帝王蟹")}override func sleep() {print("打坐不睡觉")}
}let you = SpecialMan()
you.eat()
//打印"顿顿帝王蟹"

子类如果要重写父类的方法的话,需要用 override 标记——如果没有添加 override 就重写父类方法的话编译器会报错。编译器同样会检测 override 标记的方法是否确实在父类中。

同时对应类中的属性getter,setter方法也要会自定义。使用 getter 和 setter 的计算属性。示例:

class SquareShape {var sideLength: Double = 0.0 //边长var name : Stringinit(sideLength: Double, name: String) {self.sideLength = sideLengthself.name = name}//周长的get和set的方法var perimeter: Double {get {return 4.0 * sideLength}set {sideLength = newValue / 4.0}}
}//初始化边长为8的正方形
var square = SquareShape(sideLength: 8, name: "正方形")
print(square.perimeter)//打印32
//周长设置为16
square.perimeter = 16
print(square.sideLength)//打印4


http://www.ppmy.cn/news/1548729.html

相关文章

go-zero(四) 错误处理(统一响应信息)

go-zero 错误处理(统一响应信息) 在实现注册逻辑时,尝试重复注册可能会返回 400 状态码,显然不符合正常设计思维。我们希望状态码为 200,并在响应中返回错误信息。 一、使用第三方库 1.下载库 目前 go-zero官方的…

pcap_set_timeout()函数

功能描述 pcap_set_timeout()函数用于设置数据包捕获操作的超时时间。当调用数据包捕获函数(如pcap_loop()或pcap_dispatch())时,如果在设定的超时时间内没有捕获到数据包,这些函数将返回,而不是一直等待下去。这个超时…

AI+生命科学助力化妆品行业革新:代理IP的角色与前景

目录 引言 一、AI与生命科学在化妆品行业的应用 1. 蛋白质结构预测与设计 2. 个性化与精准化产品开发 3. 虚拟试妆与用户体验提升 二、代理IP在化妆品行业中的角色 1. 数据采集与隐私保护 2. 市场策略优化 3. 跨界合作与品牌提升 三、代理IP在化妆品行业的前景 1. 智…

面向FWA市场!移远通信高性能5G-A模组RG650V-NA通过北美两大重要运营商认证

近日,全球领先的物联网整体解决方案供应商移远通信宣布,其旗下符合3GPP R17标准的新一代5G-A模组RG650V-NA成功通过了北美两家重要运营商认证。凭借高速度、大容量、低延迟、高可靠等优势,该模组可满足CPE、家庭/企业网关、移动热点、高清视频…

elementUI 表格组件结合单选框做单选效果显示

实现的效果&#xff1a;点击表格行&#xff0c;前面的radio框实现勾选 代码 <el-table-column align"center" label"选择" width"70"><template #default"scope"><el-radio-group v-model"scope.row.isChecked&q…

YOLO11改进 | 模块缝合 | C3k2融合多尺度表征学习模块 【两种改进】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的C3k2替换为融合结构来提取特征。文章在介绍主要的原理后,将手把手教学如何进行模块的…

状态模式之状态机

状态机的背景 在软件开发过程中&#xff0c;尤其是涉及到复杂的系统行为控制时&#xff0c;我们常常会遇到这样的情况&#xff1a;一个对象或者系统会在多种状态之间进行转换&#xff0c;并且在不同状态下对相同事件的响应是不同的。 以自动售卖机为例&#xff0c;自动售卖机…

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布&#xff0c;欢迎体验&#xff01; http://datagear.tech/pro/ DataGear 5.2.0 发布&#xff0c;图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强&#xff0c;具体更新内容如下&#xff1a; 重构&#xff1a;各模块管理功能访问路径…