關(guān)鍵字作用:
- Public:被Public修飾的可以在其他作用域被訪問,可以在其他作用域被繼承或者override(重寫)
- final:在任何地方都不能被重寫
- fileprivate:在swift3中fileprivate修飾表示被修飾的方法、屬性訪問權(quán)限為文件內(nèi)私有
- ** private**:在swift3中private修飾的屬性,方法表示真正的私有,離開了這個類或者結(jié)構(gòu)體的作用域外面就無法訪問
- required:在類的構(gòu)造器前添加,表明所有該類的子類必須實現(xiàn)該構(gòu)造器
- override:子類如果需要重寫父類的方法,需在方法前加上override修飾
- convenience:便利構(gòu)造器需要在init關(guān)鍵字之前用convenience修飾
- 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)