关键字笔记

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)
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

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