Swift - 15.swift中常用關(guān)鍵字

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

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

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