Swift 关键字汇总

有句话之前我提过,今天还想再说一次。那就是打铁还需自身硬。对于自身能力的严格要求,可以帮助实现我们所有梦寐以求的东西。

associatedtype:在协议中,定义一个类型的占位符名称。直到协议被实现,该占位符才会被指定具体的类型。

class:通用、灵活的结构体,是程序的基础组成部分。与 struct 类似,不同之处在于:

  • 允许一个类继承另一个类的特性。
  • 类型转换,允许在运行时检查和指定一个类的实际类型。
  • 析构方法允许类的实例释放所有资源。
  • 引用计数允许多个引用指向一个实例。

deinit:当一个类的实例即将被销毁时,会调用这个方法。

deinit
{
//从堆中释放,并释放的资源
}
}
</pre>

|

enum:定义了包含一组有关联的值的类型,并可以以一种类型安全的方式使用这些值。在 Swift 中,枚举是一等类型,拥有在其它语言中只有 class 才会支持的特性。

extension:允许给已有的类、结构体、枚举、协议类型,添加新功能。

func:包含用于执行特定任务的代码块。

import:引入一个以独立单元构建的框架或者应用。

init:类、结构体、枚举的实例的初始化准备过程。

inout:将一个值传入函数,并可以被函数修改,然后将值传回到调用处,来替换初始值。适用于引用类型和值类型。

internal:访问控制权限,允许同一个模块下的所有源文件访问,如果在不同模块下则不允许访问。

let:定义一个不可变的变量。

open:访问控制权限,允许在定义的模块外也可以访问源文件里的所有类,并进行子类化。对于类成员,允许在定义的模块之外访问和重写。

operator:特殊符号,用于检查、修改、组合值。

private:访问控制权限,只允许实体在定义的类以及相同源文件内的 extension 中访问。

protocol:定义了一组方法、属性或其它要求,用于满足特定任务和一系列功能。

public:访问控制权限,允许在定义的模块外也可以访问源文件里的所有类,但只有在同一个模块内可以进行子类化。对于类成员,允许在同个模块下访问和重写。

static:用于定义类方法,在类型本身进行调用。此外还可以定义静态成员。

struct:通用、灵活的结构体,是程序的基础组成部分,并提供了默认初始化方法。与 class 不同,当 struct 在代码中被传递时,是被拷贝的,并不使用引用计数。除此之外,struct 没有下面的这些功能:

  • 使用继承。
  • 运行时的类型转换。
  • 使用析构方法。

subscript:访问集合、列表、序列中成员元素的快捷方式。

typealias:给代码中已经存在的类,取别名。

var:定义可变变量。

break:终止程序中循环的执行,比如 if 语句、switch 语句。

case:该语句在 switch 语句中列出,在每个分支可以进行模式匹配。

continue:用于终止循环的当前迭代,并进入下一次迭代,而不会停止整个循环的执行。

default:用于涵盖在 switch 语句中,所有未明确列出的枚举成员。

defer:用于在程序离开当前作用域之前,执行一段代码。

do:用于表示处理错误代码段的开始。

else:与 if 语句结合使用。当条件为 true,执行一段代码。当条件为 false,执行另一段代码。

fallthrough:显式地允许从当前 case 跳转到下一个相邻 case 继续执行代码。

for:在序列上迭代,比如一组特定范围内的数字,数组中的元素,字符串中的字符。*与关键字 in 成对使用。

guard:当有一个以上的条件不满足要求时,将离开当前作用域。同时还提供解包可选类型的功能。

if:当条件满足时,执行代码。

in:在序列上迭代,比如一组特定范围内的数字,数组中的元素,字符串中的字符。*与关键字 key 搭配使用。

repeat:在使用循环的判断条件之前,先执行一次循环中的代码。

return:立刻终止当前上下文,离开当前作用域,此外在返回时可以额外携带一个值。

switch:将给定的值与分支进行比较。执行第一个模式匹配成功的分支代码。

where:要求关联类型必须遵守特定协议,或者类型参数和关联类型必须保持一致。也可以用于在 case 中提供额外条件,用于满足控制表达式。

where 从句可以应用于多种场景。以下例子指明了 where 的主要应用场景,泛型中的模式匹配。

while:循环执行特定的一段语句,直到条件不满足时,停止循环。

Any:用于表示任意类型的实例,包括函数类型。

as:类型转换运算符,用于尝试将值转成其它类型。

catch:如果在 do 中抛出一个错误,catch 会尝试进行匹配,并决定如何处理错误。*我写的一篇 Swift 错误处理的博客节选

false:Swift 用于表示布尔值的两个常量值之一,true 的相反值。

is:类型检查运算符,用于确定实例是否为某个子类类型。

nil:在 Swift 中表示任意类型的无状态值。

与 Objective-C 中的 nil 不同,Objective-C 中的 nil 表示指向不存在对象的指针。

//任何 Swift 类型或实例可以为 nil
var statelessPerson:Person? = nil
var statelessPlace:Place? = nil
var statelessInt:Int? = nil
var statelessString:String? = nil

rethrows:指明当前函数只有当参数抛出 error 时,才会抛出 error。

super:在子类中,暴露父类的方法、属性、下标。

class Programmer : Person
{
override func printName()
{
super.printName()
print("Hello World!")
}
}
let aDev = Programmer()
aDev.printName() //打印 Printing a name. Hello World!

self:任何类型的实例都拥有的隐式属性,等同于实例本身。此外还可以用于区分函数参数和成员属性名称相同的情况。

Self:在协议中,表示遵守当前协议的实体类型。

throw:用于在当前上下文,显式抛出 error。

throws:指明在一个函数、方法、初始化方法中可能会抛出 error。

//"throws" 表明在调用方法时,需要使用 try,try?,try!

true:Swift 用于表示布尔值的两个常量值之一,表示为真。

try:表明接着调用的函数可能会抛出 error。有三种不同的使用方式:try,try?, try!。

#available:基于平台参数,通过 ifwhileguard 语句的条件,在运行时检查 API 的可用性。

#colorLiteral:在 playground 中使用的字面表达式,用于创建颜色选取器,选取后赋值给变量。

#column:一种特殊的字面量表达式,用于获取字面量表示式的起始列数。

#elseif:条件编译控制语句,用于控制程序在不同条件下执行代码。与 #if 语句结合使用。当条件为 true,执行对应代码。

#endif:条件编译控制语句,用于控制程序在不同条件下执行代码。用于表明条件编译代码的结尾。

#file:特殊字面量表达式,返回当前代码所在源文件的名称。

#fileReference:playground 字面量语法,用于创建文件选取器,选取并返回 NSURL 实例。

#function:特殊字面量表达式,返回函数名称。在方法中,返回方法名。在属性的 getter 或者 setter 中,返回属性名。在特殊的成员中,比如 init 或 subscript 中,返回关键字名称。在文件的最顶层时,返回当前所在模块名称。

#if:条件编译控制语句,用于控制程序在不同条件下编译代码。通过判断条件,决定是否执行代码。

#imageLiteral:playground 字面量语法,创建图片选取器,选择并返回 UIImage 实例。

#line:特殊字面量表达式,用于获取当前代码的行数。

#selector:用于创建 Objective-C selector 的表达式,可以静态检查方法是否存在,并暴露给 Objective-C。

#sourceLocation:行控制语句,可以指定与原先完全不同的行数和源文件名。通常在 Swift 诊断、debug 时使用。

这些关键字,在处于对应上下文之外时,可以用作标识符。

associativity:指明同一优先级的运算符,在缺少大括号的情况,按什么顺序结合。使用 leftrightnone

convenience:次等的便利构造器,最后会调用指定构造器初始化实例。

  class Person 
 { 
  var name:String

 init(_ name:String) 
 { 
 self.name = name 
   }

   convenience init() 
    { 
  self.init("No Name") 
   } 
  }

    let me = Person() 
   print(me.name)//打印 "No Name"

dynamic:指明编译器不会对类成员或者函数的方法进行内联或虚拟化。这意味着对这个成员的访问是使用 Objective-C 运行时进行动态派发的(代替静态调用)。

{
//隐式指明含有 "objc" 属性
//这对依赖于 Objc-C 黑魔法的库或者框架非常有用
//比如 KVO、KVC、Swizzling
dynamic var name:String?
}
</pre>

didSet:属性观察者,当值存储到属性后马上调用。

     data = [1,2,3] 
    { 
          didSet 
    { 
            tableView.reloadData() 
     } 
     }

final:防止方法、属性、下标被重写。

get:返回成员的值。还可以用在计算型属性上,间接获取其它属性的值。

infix:指明一个用于两个值之间的运算符。如果一个全新的全局运算符被定义为 infix,还需要指定优先级。

indirect:指明在枚举类型中,存在成员使用相同枚举类型的实例作为关联值的情况。

lazy:指明属性的初始值,直到第一次被使用时,才进行初始化。

left:指明运算符的结合性是从左到右。在没有使用大括号时,可以用于正确判断同一优先级运算符的执行顺序。

mutating:允许在方法中修改结构体或者枚举实例的属性值。

none:是一个没有结合性的运算符。不允许这样的运算符相邻出现。

nonmutating:指明成员的 setter 方法不会修改实例的值,但可能会有其它后果。

optional:用于指明协议中的可选方法。遵守该协议的实体类可以不实现这个方法。

override:指明子类会提供自定义实现,覆盖父类的实例方法、类型方法、实例属性、类型属性、下标。如果没有实现,则会直接继承自父类。

}

postfix:位于值后面的运算符。

precedence:指明某个运算符的优先级高于别的运算符,从而被优先使用。

prefix:位于值前面的运算符。

required:确保编译器会检查该类的所有子类,全部实现了指定的构造器方法。

right:指明运算符的结合性是从右到左的。在没有使用大括号时,可以用于正确判断同一优先级运算符的顺序。

set:通过获取的新值来设置成员的值。同样可以用于计算型属性来间接设置其它属性。如果计算型属性的 setter 没有定义新值的名称,可以使用默认的 newValue。

Type:表示任意类型的类型,包括类类型、结构类型、枚举类型、协议类型。

unowned:让循环引用中的实例 A 不要强引用实例 B。前提条件是实例 B 的生命周期要长于 A 实例。

weak:允许循环引用中的实例 A 弱引用实例 B ,而不是强引用。实例 B 的生命周期更短,并会被先释放。

willSet:属性观察者,在值存储到属性之前调用。

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

推荐阅读更多精彩内容