關(guān)鍵字筆記

final

被final修飾的方法、下標(biāo)、屬性,禁止被重寫/被final修飾的類,禁止被繼承

mutating

值類型(結(jié)構(gòu)體、枚舉)的方法要修改成員的話,需要加上mutating。協(xié)議方法聲明為mutating,實(shí)現(xiàn)也要mutating

required

用required修飾指定初始化器,表明其所有子類都必須實(shí)現(xiàn)該初始化器(通過繼承或者重寫實(shí)現(xiàn))
如果子類重寫了required初始化器,也必須加上required,不用加override

typealias

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

Any

可以代表任意類型(枚舉、結(jié)構(gòu)體、類,也包括函數(shù)類型)

AnyObject

可以代表任意類類型(在協(xié)議后面寫上: AnyObject代表只有類能遵守這個(gè)協(xié)議)

AnyClass

public typealias AnyClass = AnyObject.Type

is

用來判斷是否為某種類型,以及是否是相同的類、其子類、是否遵守判斷的協(xié)議

as?、as!、as

as用來做強(qiáng)制類型轉(zhuǎn)換 (stu as? Student)?.study()

Self

Self一般用作返回值類型,限定返回值跟方法調(diào)用者必須是同一類型(也可以作為參數(shù)類型)。類似OC中的instancetype

throws

1 函數(shù)內(nèi)部通過throws拋出自定義Error,可能會(huì)拋出Error的函數(shù)必須加上throws聲明
2 不捕捉Error,在當(dāng)前函數(shù)增加throws聲明,Error將自動(dòng)拋給上層函數(shù)

rethrows

rethrows表明:函數(shù)本身不會(huì)拋出錯(cuò)誤,但調(diào)用閉包參數(shù)拋出錯(cuò)誤,那么它會(huì)將錯(cuò)誤向上拋

defer

用來定義以任何方式(拋錯(cuò)誤、return等)離開代碼塊前必須要執(zhí)行的代碼
defer語句將延遲至當(dāng)前作用域結(jié)束之前執(zhí)行
defer{}一般拿來做確保完成的,收尾的工作。

associatedtype

關(guān)聯(lián)類型的作用:給協(xié)議中用到的類型定義一個(gè)占位名稱。協(xié)議中可以擁有多個(gè)關(guān)聯(lián)類型
associatedtype Element // 關(guān)聯(lián)類型

some

使用some關(guān)鍵字聲明一個(gè)不透明類型。用于隱藏返回類型,或一次那個(gè)屬性類型
some限制只能返回一種類型
some除了用在返回值類型上,一般還可以用在屬性類型上

some也用于枚舉中關(guān)聯(lián)值
var age3:Optional<Int> = Optional.some(30)

inout

修改了函數(shù)的參數(shù),需要添加輸入輸出參數(shù),變?yōu)橐脗鬟f。inout關(guān)鍵字

open、public、internal、fileprivate、private

以模塊、文件為單位控制訪問權(quán)限。絕大部分實(shí)體默認(rèn)都是 internal 級(jí)別
1 open:允許在定義實(shí)體的模塊、其他模塊中訪問,允許其他模塊進(jìn)行繼承、重寫(open只能用在類、類成員上)
2 public:允許在定義實(shí)體的模塊、其他模塊中訪問,不允許其他模塊進(jìn)行繼承、重寫
3 internal(內(nèi)部):只允許在定義實(shí)體的模塊中訪問,不允許在其他模塊中訪問
4 fileprivate:只允許在定義實(shí)體的源文件中訪問
5 private:只允許在定義實(shí)體的封閉聲明中訪問

weak、unowned

weak定義弱引用.通過unowned定義無主引用

import Dispatch

導(dǎo)入GCD模塊,

UnsafePointer、UnsafeMutablePointer、UnsafeRawPointer、UnsafeMutableRawPointer

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

指針pointee訪問無泛型,有泛型指針獲取load是加載,store是存儲(chǔ)。

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

@frozen、@inlinable

@frozen 和 @inlinable 是保證這個(gè)enum, struct, function的結(jié)構(gòu)不變
@frozen 是對(duì) enum, struct 使用
@inlinable 是對(duì) function 使用
可以保證在項(xiàng)目中引用的某 framework 替換后仍然不需要重新編譯,
因?yàn)?enum, struct, function 的鏈接沒有發(fā)生改變

@_silgen_name

如果知道系統(tǒng)級(jí)別的函數(shù),但是該函數(shù)沒有頭文件暴露,可以用這個(gè)方法調(diào)用。
比如用下面的方法:
第一步我們在上面WS_Person.h中去掉int sum(int a, int b);函數(shù)聲明
第二步,然后在Swift文件中全局區(qū)
@silgen_name("sum")
func sum( v1: Int32, _ v2: Int32) -> Int32
第三步,直接調(diào)用sum(33, 44)

@objcMembers

必須是被@objcMembers或@objc修飾的方法才可以定義選擇器。我們給button,手勢,添加方法。也要用到@objc.
OC調(diào)用swift,@objcMembers修飾swift類。代表默認(rèn)所有成員都會(huì)暴露給OC(包括擴(kuò)展中定義的成員)

@objc

1 OC調(diào)用swift,使用@objc修飾swift文件的屬性或方法,選擇性暴露給OC。
2 OC調(diào)用swift,可以通過 @objc 重命名Swift暴露給OC的符號(hào)名(類名、屬性名、函數(shù)名等)
3 被 @objc 修飾的協(xié)議,還可以暴露給OC去遵守實(shí)現(xiàn)
4 可以通過 @objc 定義可選協(xié)議(這種協(xié)議只能被 class 遵守)
5 必須是被@objcMembers或@objc修飾的方法才可以定義選擇器。
我們給button,手勢,添加方法。也要用到@objc.原理同1,沒有暴漏給OC的方法名是不能使用的。
perform(@Selector)和 @selector()本來就是Runtime,OC的。

dynamic

被 @objc dynamic 修飾的內(nèi)容會(huì)具有動(dòng)態(tài)性,比如調(diào)用方法會(huì)走runtime那一套流程
Swift 支持 KVC \ KVO 的條件:屬性所在的類、監(jiān)聽器最終繼承自 NSObject,并且@objc dynamic 修飾對(duì)應(yīng)的屬性。

@discardableResult

@discardableResult 表示返回值可以忽略,如果沒有用到返回值也不會(huì)有警告

Sequence

Sequence 是一個(gè)協(xié)議,它表示一個(gè)可以遍歷其元素的集合類型。任何遵循 Sequence 協(xié)議的類型都必須提供一個(gè)迭代器,用于按順序訪問其元素。Swift 標(biāo)準(zhǔn)庫中的許多集合類型,如數(shù)組(Array)、集合(Set)、字典的值(Dictionary.Values)以及字符串(String),都遵循 Sequence 協(xié)議。此外,你也可以創(chuàng)建自定義類型并使其遵循 Sequence 協(xié)議,以提供自定義的遍歷行為。

Sendable 和 @Sendable

Swift 5.5 的版本,Apple 引入了多項(xiàng)對(duì)于并發(fā)性改進(jìn),其中 Sendable 和 @Sendable 是兩個(gè)核心概念,它們解決了結(jié)構(gòu)化的并發(fā)結(jié)構(gòu)體和 actor 消息之間傳遞的類型檢查問題。類不是線程安全的,不能傳遞,所以編譯器不能隱式地將其標(biāo)記為 Sendable。因?yàn)?final class 是不可改變的(immutable),因此它是線程安全的,所以我們可以顯示的讓其遵守 Sendable 協(xié)議。
Sendable 協(xié)議是 Swift 并發(fā)模型中的一個(gè)關(guān)鍵協(xié)議,它向編譯器表明某個(gè)類型是否可以被安全的跨并發(fā)域(如 actors、并發(fā)隊(duì)列等)傳遞。當(dāng)類型符合 Sendable 協(xié)議時(shí),編譯器可以保證該類型的實(shí)例在并發(fā)環(huán)境下是線程安全的。
Sendable

@inlinable

編譯器內(nèi)聯(lián)函數(shù)優(yōu)化
inlinable中文
inlinable英文

try-catch

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift中有多少關(guān)鍵字?在Swift官方文檔的詞匯結(jié)構(gòu)中, 有非常多的關(guān)鍵字, 它們被用于聲明中、語句中、表達(dá)式...
    云涌海嘯閱讀 738評(píng)論 2 0
  • const: 所修飾的對(duì)象或變量不能改變,修飾函數(shù)時(shí),該函數(shù)不能修改在函數(shù)外面聲明的變量,也不能調(diào)用任何非cons...
    Catcola閱讀 556評(píng)論 0 0
  • 學(xué)習(xí)路上的疑惑為什么在看過一些博客或是文檔后,過上一兩天,也可能是半天就忘記了呢?反思后,我意識(shí)到有兩個(gè)方面的問題...
    最晴天閱讀 1,433評(píng)論 1 2
  • Swift官方文檔的詞匯結(jié)構(gòu)中, 有非常多的關(guān)鍵字, 它們被用于聲明中、語句中、表達(dá)式中、類中、模式中, 還有以數(shù)...
    小宇宙_fly閱讀 868評(píng)論 0 3
  • Swift關(guān)鍵字匯總?cè)缦拢?一: 常見使用頻繁的關(guān)鍵字: 1,訪問修飾符:在swift中,訪問修飾符有五種,分別是...
    物非0人非閱讀 3,706評(píng)論 2 15

友情鏈接更多精彩內(nèi)容