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
- 用作表達和類型的關(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
: 用來聲明一個類
enum
: 用來聲明一個枚舉
init
: 相對于類的釋構(gòu)方法的修飾缰揪。
deinit
: 相對于類的釋構(gòu)方法的修飾。
對于類的構(gòu)造和釋構(gòu)在swift 中需要使用關(guān)鍵詞來修飾堕澄,而很多高級語言并不需要特別的指定邀跃,便C++ 只需要類名與構(gòu)造函數(shù)名相同就可以,不需要額外的關(guān)鍵詞蛙紫。
extension
: 擴展.類似于OC的categories.
1. Swift 中的可以擴展以下幾個:
2. 添加計算型屬性和計算靜態(tài)屬性
3. 定義實例方法和類型方法
4. 提供新的構(gòu)造器
5. 定義下標(biāo)
6. 定義和使用新的嵌套類型
7. 使一個已有類型符合某個接口
let
: 聲明一個常量. 類似于const
protocol
: 協(xié)議.也可以叫接口.這個往往在很多高級語言中不能多重繼承的情況下使用協(xié)議是一個比較好的多態(tài)方式。
static
: 聲明靜態(tài)變量或者函數(shù)
struct
: 聲明定義一個結(jié)構(gòu)體
subscript
: 下標(biāo)索引修飾.可以讓class途戒、struct坑傅、以及enum使用下標(biāo)訪問內(nèi)部的值
typealias
: 為此類型聲明一個別名.和 typedef類似.
break
: 跳出循環(huán).一般在控制流中使用,比如 for . while switch等語句
case
: switch的選擇分支.
continue
: 跳過本次循環(huán),繼續(xù)執(zhí)行后面的循環(huán).
in
: 范圍或集合操作,多用于遍歷.
fallthrough
: swift語言特性switch語句的break可以忽略不寫,滿足條件時直接跳出循環(huán).fallthrough的作用就是執(zhí)行完當(dāng)前case,繼續(xù)執(zhí)行下面的case.類似于其它語言中省去break里,會繼續(xù)往后一個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ù)庫查詢時的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 后面的條件時唁毒,才執(zhí)行語句。
is & as
: is一般用于對一些變量的類型做判斷.類似于OC中的isKindClass. as 與強制轉(zhuǎn)換含義雷同.
is Example:
for view : AnyObject in self.view.subviews
{
if view is UIButton
{
let btn = view as UIButton;
println(btn)
}
}
dynamicType
: 獲取對象的動態(tài)類型,即運行時的實際類型,而非代碼指定或編譯器看到的類型
__COLUMN__
: 列號,
** __FILE__
**:路徑,
__FUNCTION__
: 函數(shù),
__LINE__
: 行號
associativity
: 運算符的結(jié)合性inout
: inout作為函數(shù)聲明時,引用傳值的關(guān)鍵字星爪。但是在調(diào)用的時候引用的是地址,所以在引用的時候要加上 &
,例如:
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)然后做操作,在將要賦值的時候和已經(jīng)賦值的時候做相 關(guān)操作
mutating
: 作用:寫在func前面,以便于讓func可以修改struct和protocol的extension中的成員的值浆西。 如果func前面不加mutating,struct和protocol的extension中的成員的值便被保護起來,不能修改
class var
: 在swift中對于enum和struct來說支持用static關(guān)鍵字來標(biāo)示靜態(tài)變量,
但是對于class成員來說顽腾,只能以class var的方式返回一個只讀值近零。例如:
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 {
}
}
這樣其實很好的區(qū)分了struct和class的功能,
不像C# 抓來一個隨便用抄肖,但相對于oc來講其實是弱化了界限久信,
如果你想在class中搞一個非只讀的靜態(tài)變量出來,可以和struct進行配合漓摩。
convenience
: convenience用來進行方便的初始化裙士,就相當(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ōu)先級啃炸,越高的話優(yōu)先進行計算鞍泉。swift 中乘法和除法的優(yōu)先級是 150 ,加法和減法的優(yōu)先級是 140 肮帐,這里我們定義點積的優(yōu)先級為 160 咖驮,就是說應(yīng)該早于普通的乘除進行運算。
unowned, unowned(safe), unowned(unsafe)
:無宿主引用训枢。
infix
: 表示要定義的是一個中位操作符托修,即前后都是輸入
defer
: 用來包裹一段代碼,這個代碼塊將會在當(dāng)前作用域結(jié)束的時候被調(diào)用恒界。這通常被用來對當(dāng)前的代碼進行一些清理工作睦刃,比如關(guān)閉打開的文件等。
可以在同一個作用域中指定多個 defer
代碼塊十酣,在當(dāng)前作用域結(jié)束時涩拙,它們會以相反的順序被調(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有一個好處:如果不使用return,break,continue,throw跳出當(dāng)前作用域搓彻,編譯器會報錯.所以,對那些對條件要求十分嚴(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ù)記錄.