引言
刚开始接触到iOS 开发
时,便是使用Swift
语言进行开发,在大致看了一下Swift
相关文档的目录结构后,感觉跟其他语言大差不差,便随意扫了一遍,但是在接触的时间变长后,渐渐发现,它的很多特殊的语法我都给忽略了,都是遇到时现查一番,本文便是对遇到的特殊语法的一个简要总结
关键字
weak
用于声明弱引用
,主要用于解决实例循环强引用
的问题。在类之间相互引用时,如果使用强引用
(默认情况下),可能会导致循环引用,从而造成内存泄漏
本篇文章详细的介绍了weak
的用法,同时还提到了另一个解决实例循环强引用
问题的关键字unowned
lazy
用于声明延时加载存储属性,将属性的初始化推迟到第一次访问该属性的时候,而不是在对象初始化时立即执行
lazy
声明的属性必须声明为变量(var
),因为一旦初始化,它们的值可以在后续访问中改变lazy
属性在第一次访问后会保留其值,因此它只会初始化一次
本篇文章详细介绍了延时加载存储属性
的概念
struct 结构体
struct 结构体
与class 类
看起来挺相似的,无论长相还是写法,但是结构体
还是与类
有着很多区别的:
- 值类型
- 不支持继承
- 具有自动生成的成员初始化器
- 属性默认不可变,要声明为
var
才可变
本篇文章对比介绍了struct 结构体
和class 类
的区别
最大的区别:struct
是值类型,而class
是引用类型
private(set)
private
用于限制整个成员(包括读取和设置)private(set)
用于限制属性的设置操作,但外部能读取
Swift
提供了五个访问控制级别的修饰符:open
、public
、internal
、file private
和 private
访问级别修饰符都支持带上一个参数,该参数由一对圆括号和其中的set
关键字组成
typealias:类型别名
typealias
是Swift
中的一个关键字,用于为现有的数据类型
(包括类
、结构体
、枚举
、协议
、函数类型
等)定义一个别名
。这个别名可以用来更方便地引用复杂的数据类型,提高代码的可读性和可维护性
try 和 try?
-
try:显示处理错误
使用
try
表示希望捕获可能的错误并进行处理。如果发生错误,程序将抛出一个异常,可以使用do-catch
块进行错误处理 -
try?:错误默认返回nil
使用
try?
表示希望尽量避免处理错误,而是将结果作为可选值处理。如果代码执行成功,将返回结果值;如果发生错误,将返回nil
运算符
!:强制解析
!
将可选类型(?)
的值强制解包
,确定值不会为nil
可使用,否则会导致运行崩溃
?:可选类型
可选类型
是Swift
中用于处理可能包含空值(nil)
的值的机制。可选类型
有两种可能的值:
- 有值:表示包含了一个具体的值
- 无值(nil):表示没有值
??:空合并运算符
??
的作用是在可选值
为nil
时提供一个默认值,以防止使用可选值
时出现nil
引发的问题
区间运算符
a...b
:闭区间运算符。表示一个从a
到b
(包括a
和b
)的闭区间范围a...<b
:半开区间运算符。表示一个从a
到b
(包括a
,但不包括b
)的半开区间范围
属性观察器
willSet
:在新的值被设置之前调用。可以在属性值即将发生变化时执行额外的代码didSet
:在新的值被设置之后调用。可以在属性值发生变化后执行额外的代码
swift
// 在类型 {} 内使用
var property: Int {
willSet {
// 在属性值将要被设置前执行的代码
}
didSet {
// 在属性值被设置后执行的代码
}
}
数据类型
字典
字典
这个数据类型在其他语言中也有,并不特殊,此处列出仅是其写法比较特殊,有些类似数组:
swift
[KeyType: ValueType]
// 声明
var person = ["name": "Mary", "age": "18"]
// 添加
person["sex"] = "female"
// 访问
let personName = person["name"]
// 更新
person["name"] = "Alice"
// 删除
person["name"] = nil
枚举
枚举
这个数据结构应该也是不陌生了,此处列出是因为在Swift
中广泛的使用枚举关联值这个概念,在此便着重声明一下
枚举
是一种在编程中用于定义命名常量集合的数据类型。枚举
是一种有限的、离散的数据类型,它包含一组可能的值
swift
// 带关联值的枚举:可以为枚举成员添加关联值,以便在枚举的不同成员之间传递数据
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
本篇文章详细的介绍了枚举相关的概念
元组
元组
这个数据结构在其他的语言(如:Python)也是存在的,此处列出是为了说明一下在Swift
中元组
的使用操作
元组
可以包含不同类型的值,而且可以包含任意数量的值
swift
// 写法一
(value1, value2)
// 写法二
(key1: value1, key2: value2)
有key
时通过key
访问,没有时通过下标索引
访问
swift
let person1 = ("John", 30)
let name1 = person1.0
let person2 = (name: "John", age: 30)
let name2 = person2.name
语法
\():字符串插值语法
\()
用于将变量、常量、表达式或其他值嵌入到字符串字面量中,以创建一个新的字符串。这允许在字符串中包含变量或表达式的值,使字符串更加动态和可变
guard 语句
guard
语句是Swift
中用于执行条件检查
并提前退出函数、方法或循环的结构之一。它通常与else
子句一起使用,用于在条件不满足时执行特定的操作
swift
guard condition else {
}
闭包
Swift
中的闭包
通常表示为用花括号{}
包裹的一段代码块。这个代码块可以接受参数、返回值,以及在其中执行特定的操作
闭包是一种自包含的功能块,可以在代码中传递和引用,也可以在需要时执行
swift
{ (parameters) -> ReturnType in
// 闭包体,执行特定的操作
}
闭包作为参数传入函数,能使得函数更灵活、更通用。闭包在作为函数的参数传入时,可以将闭包的闭包体约等于是函数的函数体
尾随闭包:如果函数的最后一个参数是闭包类型,可以将闭包表达式写在函数调用的圆括号外部,作为函数调用的一部分
协议
待更新
小结
语言是基础,你可能会由于各种原因接触到多种语言,但是打牢基础是无论做什么都需要遵循的准则。对于编程,我对打牢语言基础的感悟便是掌握牢固了才能看懂代码~