关键字笔记

final

被final修饰的方法、下标、属性,禁止被重写/被final修饰的类,禁止被继承

mutating

值类型(结构体、枚举)的方法要修改成员的话,需要加上mutating。协议方法声明为mutating,实现也要mutating

required

用required修饰指定初始化器,表明其所有子类都必须实现该初始化器(通过继承或者重写实现)
如果子类重写了required初始化器,也必须加上required,不用加override

typealias

别名 typealias RealPerson = Person & Livable & Runnable ,func fn(obj: RealPerson) {}

Any

可以代表任意类型(枚举、结构体、类,也包括函数类型)

AnyObject

可以代表任意类类型(在协议后面写上: AnyObject代表只有类能遵守这个协议)

AnyClass

public typealias AnyClass = AnyObject.Type

is

用来判断是否为某种类型,以及是否是相同的类、其子类、是否遵守判断的协议

as?、as!、as

as用来做强制类型转换 (stu as? Student)?.study()

Self

Self一般用作返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型)。类似OC中的instancetype

throws

1 函数内部通过throws抛出自定义Error,可能会抛出Error的函数必须加上throws声明
2 不捕捉Error,在当前函数增加throws声明,Error将自动抛给上层函数

rethrows

rethrows表明:函数本身不会抛出错误,但调用闭包参数抛出错误,那么它会将错误向上抛

defer

用来定义以任何方式(抛错误、return等)离开代码块前必须要执行的代码
defer语句将延迟至当前作用域结束之前执行
defer{}一般拿来做确保完成的,收尾的工作。

associatedtype

关联类型的作用:给协议中用到的类型定义一个占位名称。协议中可以拥有多个关联类型
associatedtype Element // 关联类型

some

使用some关键字声明一个不透明类型。用于隐藏返回类型,或一次那个属性类型
some限制只能返回一种类型
some除了用在返回值类型上,一般还可以用在属性类型上

some也用于枚举中关联值
var age3:Optional<Int> = Optional.some(30)

inout

修改了函数的参数,需要添加输入输出参数,变为引用传递。inout关键字

open、public、internal、fileprivate、private

以模块、文件为单位控制访问权限。绝大部分实体默认都是 internal 级别
1 open:允许在定义实体的模块、其他模块中访问,允许其他模块进行继承、重写(open只能用在类、类成员上)
2 public:允许在定义实体的模块、其他模块中访问,不允许其他模块进行继承、重写
3 internal(内部):只允许在定义实体的模块中访问,不允许在其他模块中访问
4 fileprivate:只允许在定义实体的源文件中访问
5 private:只允许在定义实体的封闭声明中访问

weak、unowned

weak定义弱引用.通过unowned定义无主引用

import Dispatch

导入GCD模块,

UnsafePointer、UnsafeMutablePointer、UnsafeRawPointer、UnsafeMutableRawPointer

UnsafePointer<Pointee> 类似于 const Pointee *
UnsafeMutablePointer<Pointee> 类似于 Pointee *
UnsafeRawPointer 类似于 const void *
UnsafeMutableRawPointer 类似于 void *

指针pointee访问无泛型,有泛型指针获取load是加载,store是存储。

ptr.pointee += 20
ptr.storeBytes(of: 20, as: Int.self)
ptr.load(as: Int.self)

@frozen、@inlinable

@frozen 和 @inlinable 是保证这个enum, struct, function的结构不变
@frozen 是对 enum, struct 使用
@inlinable 是对 function 使用
可以保证在项目中引用的某 framework 替换后仍然不需要重新编译,
因为 enum, struct, function 的链接没有发生改变

@_silgen_name

如果知道系统级别的函数,但是该函数没有头文件暴露,可以用这个方法调用。
比如用下面的方法:
第一步我们在上面WS_Person.h中去掉int sum(int a, int b);函数声明
第二步,然后在Swift文件中全局区
@silgen_name("sum")
func sum( v1: Int32, _ v2: Int32) -> Int32
第三步,直接调用sum(33, 44)

@objcMembers

必须是被@objcMembers或@objc修饰的方法才可以定义选择器。我们给button,手势,添加方法。也要用到@objc.
OC调用swift,@objcMembers修饰swift类。代表默认所有成员都会暴露给OC(包括扩展中定义的成员)

@objc

1 OC调用swift,使用@objc修饰swift文件的属性或方法,选择性暴露给OC。
2 OC调用swift,可以通过 @objc 重命名Swift暴露给OC的符号名(类名、属性名、函数名等)
3 被 @objc 修饰的协议,还可以暴露给OC去遵守实现
4 可以通过 @objc 定义可选协议(这种协议只能被 class 遵守)
5 必须是被@objcMembers或@objc修饰的方法才可以定义选择器。
我们给button,手势,添加方法。也要用到@objc.原理同1,没有暴漏给OC的方法名是不能使用的。
perform(@Selector)和 @selector()本来就是Runtime,OC的。

dynamic

被 @objc dynamic 修饰的内容会具有动态性,比如调用方法会走runtime那一套流程
Swift 支持 KVC \ KVO 的条件:属性所在的类、监听器最终继承自 NSObject,并且@objc dynamic 修饰对应的属性。

@discardableResult

@discardableResult 表示返回值可以忽略,如果没有用到返回值也不会有警告

Sequence

Sequence 是一个协议,它表示一个可以遍历其元素的集合类型。任何遵循 Sequence 协议的类型都必须提供一个迭代器,用于按顺序访问其元素。Swift 标准库中的许多集合类型,如数组(Array)、集合(Set)、字典的值(Dictionary.Values)以及字符串(String),都遵循 Sequence 协议。此外,你也可以创建自定义类型并使其遵循 Sequence 协议,以提供自定义的遍历行为。

Sendable 和 @Sendable

Swift 5.5 的版本,Apple 引入了多项对于并发性改进,其中 Sendable 和 @Sendable 是两个核心概念,它们解决了结构化的并发结构体和 actor 消息之间传递的类型检查问题。类不是线程安全的,不能传递,所以编译器不能隐式地将其标记为 Sendable。因为 final class 是不可改变的(immutable),因此它是线程安全的,所以我们可以显示的让其遵守 Sendable 协议。
Sendable 协议是 Swift 并发模型中的一个关键协议,它向编译器表明某个类型是否可以被安全的跨并发域(如 actors、并发队列等)传递。当类型符合 Sendable 协议时,编译器可以保证该类型的实例在并发环境下是线程安全的。
Sendable

@inlinable

编译器内联函数优化
inlinable中文
inlinable英文

try-catch

do {
try expression
} catch {
print(error)
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift中有多少关键字?在Swift官方文档的词汇结构中, 有非常多的关键字, 它们被用于声明中、语句中、表达式...
    云涌海啸阅读 3,892评论 2 0
  • const: 所修饰的对象或变量不能改变,修饰函数时,该函数不能修改在函数外面声明的变量,也不能调用任何非cons...
    Catcola阅读 3,443评论 0 0
  • 学习路上的疑惑为什么在看过一些博客或是文档后,过上一两天,也可能是半天就忘记了呢?反思后,我意识到有两个方面的问题...
    最晴天阅读 5,151评论 1 2
  • Swift官方文档的词汇结构中, 有非常多的关键字, 它们被用于声明中、语句中、表达式中、类中、模式中, 还有以数...
    小宇宙_fly阅读 4,216评论 0 3
  • Swift关键字汇总如下: 一: 常见使用频繁的关键字: 1,访问修饰符:在swift中,访问修饰符有五种,分别是...
    物非0人非阅读 8,947评论 2 15

友情链接更多精彩内容