swift中常用關(guān)鍵字
- **用作聲明的關(guān)鍵字: **
class
、deinit
店量、enum
、extension
旱爆、func
舀射、import
、init
怀伦、let
脆烟、protocol
房待、static
邢羔、struct
、subscript
桑孩、typealias
拜鹤、var
- 用作語句的關(guān)鍵字
break
、case
流椒、continue
准夷、default
贯钩、do
瞧毙、else
六敬、fallthrough
、if
安岂、in
、for
帆吻、return
域那、switch
、where
、while
- 用作表達(dá)和類型的關(guān)鍵字:
as
次员、dynamicType
败许、new
、is
淑蔚、super
市殷、self
、Self
刹衫、Type
醋寝、__COLUMN__
、__FILE__
带迟、__FUNCTION__
音羞、__LINE__
- 特定上下文中被保留的關(guān)鍵字:
associativity
、didset
仓犬、get
嗅绰、infix
、inout
搀继、left
窘面、mutating
、none
叽躯、nonmutating
财边、operator
、override
险毁、postfix
制圈、precedence
、prefix
畔况、rightset
鲸鹦、unowned
、unowned(sale)
跷跪、unowned(unsafe)
馋嗜、weak
、willset
關(guān)鍵字作用 :
class
: 用來聲明一個(gè)類
enum
: 用來聲明一個(gè)枚舉
init
: 相對于類的釋構(gòu)方法的修飾吵瞻。
deinit
: 相對于類的釋構(gòu)方法的修飾葛菇。
對于類的構(gòu)造和釋構(gòu)在swift 中需要使用關(guān)鍵詞來修飾,而很多高級語言并不需要特別的指定橡羞,便C++ 只需要類名與構(gòu)造函數(shù)名相同就可以眯停,不需要額外的關(guān)鍵詞。
extension
: 擴(kuò)展.類似于OC的categories.
1. Swift 中的可以擴(kuò)展以下幾個(gè):
2. 添加計(jì)算型屬性和計(jì)算靜態(tài)屬性
3. 定義實(shí)例方法和類型方法
4. 提供新的構(gòu)造器
5. 定義下標(biāo)
6. 定義和使用新的嵌套類型
7. 使一個(gè)已有類型符合某個(gè)接口
let
: 聲明一個(gè)常量. 類似于const
protocol
: 協(xié)議.也可以叫接口.這個(gè)往往在很多高級語言中不能多重繼承的情況下使用協(xié)議是一個(gè)比較好的多態(tài)方式卿泽。
static
: 聲明靜態(tài)變量或者函數(shù)
struct
: 聲明定義一個(gè)結(jié)構(gòu)體
subscript
: 下標(biāo)索引修飾.可以讓class莺债、struct、以及enum使用下標(biāo)訪問內(nèi)部的值
typealias
: 為此類型聲明一個(gè)別名.和 typedef類似.
break
: 跳出循環(huán).一般在控制流中使用,比如 for . while switch等語句
case
: switch的選擇分支.
continue
: 跳過本次循環(huán),繼續(xù)執(zhí)行后面的循環(huán).
in
: 范圍或集合操作,多用于遍歷.
fallthrough
: swift語言特性switch語句的break可以忽略不寫,滿足條件時(shí)直接跳出循環(huán).fallthrough的作用就是執(zhí)行完當(dāng)前case,繼續(xù)執(zhí)行下面的case.類似于其它語言中省去break里,會繼續(xù)往后一個(gè)case跑齐邦,直到碰到break或default才完成的效果.
switch integerToDescribe {
case 1, 3, 5, 7, 11, 13, 17, 19:
description += " a prime number, and also";
fallthrough // 執(zhí)行到此并不跳出循環(huán),而是繼續(xù)執(zhí)行case5
case 5:
description += " an integer" // 執(zhí)行到這一步,跳出循環(huán)
default :
description += " finished"
}
where
: 用于條件判斷,和數(shù)據(jù)庫查詢時(shí)的where 'id > 10'這樣功能. swift語言的特性.OC中并沒有.
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
println("(\\(x), \\(y)) is on the line x == y")
case let (x, y) where x == -y:
println("(\\(x), \\(y)) is on the line x == -y")
case let (x, y):
println("(\\(x), \\(y)) is just some arbitrary point")
當(dāng)switch的條件滿足where 后面的條件時(shí)椎侠,才執(zhí)行語句。
is & as
: is一般用于對一些變量的類型做判斷.類似于OC中的isKindClass. as 與強(qiáng)制轉(zhuǎn)換含義雷同.
is Example:
for view : AnyObject in self.view.subviews
{
if view is UIButton
{
let btn = view as UIButton;
println(btn)
}
}
dynamicType
: 獲取對象的動(dòng)態(tài)類型,即運(yùn)行時(shí)的實(shí)際類型,而非代碼指定或編譯器看到的類型
__COLUMN__
: 列號,
** __FILE__
**:路徑,
__FUNCTION__
: 函數(shù),
__LINE__
: 行號
[圖片上傳失敗...(image-e6d1f9-1522739666241)]
associativity
: 運(yùn)算符的結(jié)合性
inout
: inout作為函數(shù)聲明時(shí),引用傳值的關(guān)鍵字措拇。但是在調(diào)用的時(shí)候引用的是地址,所以在引用的時(shí)候要加上 &
,例如:
func test(inout a :Int , inout b :Int){ // 函數(shù)內(nèi)相關(guān)操作
}
var num1 = 3
var num2 = 10
test(&num1,&num2)
willSet 和 didSet
: willSet 和 didSet的作用是對賦值過程前后附加額外的操作
可以看做是捕獲狀態(tài)然后做操作,在將要賦值的時(shí)候和已經(jīng)賦值的時(shí)候做相 關(guān)操作
mutating
: 作用:寫在func前面,以便于讓func可以修改struct和protocol的extension中的成員的值我纪。 如果func前面不加mutating,struct和protocol的extension中的成員的值便被保護(hù)起來,不能修改
class var
: 在swift中對于enum和struct來說支持用static關(guān)鍵字來標(biāo)示靜態(tài)變量,
但是對于class成員來說丐吓,只能以class var的方式返回一個(gè)只讀值浅悉。例如:
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int { // return an Int value here
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// return an Int value here
}
}
class SomeClass {
class var computedTypeProperty: Int {
}
}
這樣其實(shí)很好的區(qū)分了struct和class的功能,
不像C# 抓來一個(gè)隨便用汰蜘,但相對于oc來講其實(shí)是弱化了界限仇冯,
如果你想在class中搞一個(gè)非只讀的靜態(tài)變量出來,可以和struct進(jìn)行配合族操。
convenience
: convenience用來進(jìn)行方便的初始化苛坚,就相當(dāng)于構(gòu)造函數(shù)重載。
對于class來講色难,默認(rèn)或指定的初始化方法作為所謂的Designated初始化泼舱。
若重載的初始化需要調(diào)用Designated初始化則將它作為convenience初始化,在方法前要加上convenience關(guān)鍵字枷莉。
class Figure{
var name:String!
var nikname:String?
init(){
name = "John"
}
convenience init(name:String!,nikname:String!) {
self.init() self.name = name self.nikname = nikname
}
}
precedence
: 運(yùn)算的優(yōu)先級娇昙,越高的話優(yōu)先進(jìn)行計(jì)算。swift 中乘法和除法的優(yōu)先級是 150 笤妙,加法和減法的優(yōu)先級是 140 冒掌,這里我們定義點(diǎn)積的優(yōu)先級為 160 ,就是說應(yīng)該早于普通的乘除進(jìn)行運(yùn)算蹲盘。
unowned, unowned(safe), unowned(unsafe)
:無宿主引用股毫。
infix
: 表示要定義的是一個(gè)中位操作符,即前后都是輸入
defer
: 用來包裹一段代碼召衔,這個(gè)代碼塊將會在當(dāng)前作用域結(jié)束的時(shí)候被調(diào)用铃诬。這通常被用來對當(dāng)前的代碼進(jìn)行一些清理工作,比如關(guān)閉打開的文件等苍凛。
可以在同一個(gè)作用域中指定多個(gè) defer
代碼塊趣席,在當(dāng)前作用域結(jié)束時(shí),它們會以相反的順序被調(diào)用醇蝴,即先定義的后執(zhí)行宣肚,后定義的先執(zhí)行。
guard
: 當(dāng)某些條件不滿足的情況下悠栓,跳出作用域.
func testFunc(input:Int) {
guard input < 10 else {
print("Input must < 10")
return
}
print("Input is \\(input)")}
testFunc(1)
testFunc(11)
與if用法一樣霉涨,但是作用與if相反.相比if來說,guard有一個(gè)好處:如果不使用return,break,continue,throw跳出當(dāng)前作用域弧呐,編譯器會報(bào)錯(cuò).所以,對那些對條件要求十分嚴(yán)格的地方嵌纲,guard是不二之選。guard也可以使用可選綁定(Optional Binding)也就是 guard let
的格式
func testMathFunc(input:Int?){
guard let _ = input else {
print("Input cannot be nil")
return
}
}
testMathFunc(nil)
PS: set腥沽、get 逮走、new、self今阳、super师溅、none、if 盾舌、for墓臭、return文中沒提到的就不一一介紹了。沒提到的都是最基本的或者我不知道的或者不常用的關(guān)鍵字,后面接觸到新的再繼續(xù)記錄.