编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.Swift基础语法
  • 02.运算符和流程控制
  • 03.函数与闭包
  • 04.高级运算符和枚举
  • 05.类和结构体
  • 06.属性&方法&构造
  • 07.内存管理和异常
  • 08.拓展&泛型&协议

05.类和结构体

目录介绍

  • 5.1 结构体
    • 5.1.1 什么是结构体
    • 5.1.2 结构体语法
    • 5.1.3 结构体案例
    • 5.1.4 结构体应用场景
  • 5.2 类
    • 5.2.1 什么是类
    • 5.2.2 类语法和定义
    • 5.2.3 访问类属性
    • 5.2.4 恒等运算符

5.1 结构体

5.1.1 什么是结构体

Swift 结构体是构建代码所用的一种通用且灵活的构造体。

我们可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能。

与 C 和 Objective C 不同的是:

  • 结构体不需要包含实现文件和接口。
  • 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口。

结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。

5.1.2 结构体语法

我们通过关键字 struct 来定义结构体:

struct nameStruct { 
   Definition 1
   Definition 2
   ……
   Definition N
}

5.1.3 结构体案例

下面是一个使用Swift中结构体的简单案例:

// 定义一个结构体
struct Person {
    var name: String
    var age: Int
    
    // 结构体方法
    func introduce() {
        print("我叫\(name),今年\(age)岁。")
    }
}

// 创建结构体实例
var person1 = Person(name: "Alice", age: 25)
var person2 = Person(name: "Bob", age: 30)

// 访问结构体属性
print(person1.name) // 输出: "Alice"
print(person2.age) // 输出: 30

// 调用结构体方法
person1.introduce() // 输出: "我叫Alice,今年25岁。"
person2.introduce() // 输出: "我叫Bob,今年30岁。"

结构体是值类型,当我们将结构体赋值给另一个变量或常量时,会创建一个新的副本。这意味着person1和person2是独立的实例,它们的属性可以独立地进行修改。

5.1.4 结构体应用场景

与类相比,结构体是值类型,它们在传递和复制时会创建副本。这使得结构体在某些情况下更适合使用,特别是对于简单的数据类型和小型数据模型。

结构体在Swift中有许多应用场景,以下是一些常见的使用情况:

  1. 配置选项:结构体可以用于表示配置选项,例如游戏设置、应用程序配置或用户首选项。每个选项可以作为结构体的属性,以便轻松地进行设置和访问。
  2. 数据缓存:结构体可以用于创建轻量级的数据缓存,以便在应用程序中存储和传递数据。结构体的值类型特性使得复制和传递数据更加高效。
  3. API设计:结构体可以用于设计API,以提供一组相关的属性和方法。通过将相关功能封装在结构体中,可以提供更清晰、可读性更高的代码接口。

5.2 类

5.2.1 什么是类

Swift 类是构建代码所用的一种通用且灵活的构造体。

我们可以为类定义属性(常量、变量)和方法。

与其他编程语言所不同的是,Swift 并不要求你为自定义类去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类,系统会自动生成面向其它代码的外部接口。

5.2.2 类语法和定义

语法:

class classname {
   Definition 1
   Definition 2
   ……
   Definition N
}

类定义:

class student{
    var studname: String
    var mark: Int
    var mark2: Int
}

5.2.3 访问类属性

类的属性可以通过 . 来访问。格式为:实例化类名.属性名:

class studentMarks {
   var mark1 = 300
   var mark2 = 400
   var mark3 = 900
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")

5.2.4 恒等运算符

因为类是引用类型,有可能有多个常量和变量在后台同时引用某一个类实例。

为了能够判定两个常量或者变量是否引用同一个类实例,Swift 内建了两个恒等运算符:

  1. 运算符为:=== 如果两个常量或者变量引用同一个类实例则返回 true
  2. 运算符为:!== 如果两个常量或者变量引用不同一个类实例则返回 true
class SampleClass: Equatable {
    let myProperty: String
    init(s: String) {
        myProperty = s
    }
}
func ==(lhs: SampleClass, rhs: SampleClass) -> Bool {
    return lhs.myProperty == rhs.myProperty
}

let spClass1 = SampleClass(s: "Hello")
let spClass2 = SampleClass(s: "Hello")

if spClass1 === spClass2 {// false
    print("引用相同的类实例 \(spClass1)")
}

if spClass1 !== spClass2 {// true
    print("引用不相同的类实例 \(spClass2)")
}
贡献者: yangchong211
上一篇
04.高级运算符和枚举
下一篇
06.属性&方法&构造