swift 學習筆記[1]

最近在IMOOK(網站)上自學了下swift , 總結下swift相對其餘語言的不一樣之處 , 方便熟悉其餘語言的程序員,熟悉swift語言的特性.java

 

1. swift 的特別之處就是能夠在原有的類上 , 使用 protocol (相似java接口) 得到泛型的做用 . ios

2. 經過extension能夠擴展普通的class, struct, 也能夠擴展protocol, 使用protocol類都擁有公共的擴展.程序員

 

 1 protocol Readable { 
 2 
 3       var programLang:String
 4        
 5       var programeSourceUrl:String
 6 
 7       var maxExecuteSecounds:Long
 8 
 9 }
10 
11 protocol Execuable {
12      func execute() 
13 }
14 
15 
16 
17 class BrowserScript  : Readable {
18 
19           var progameLang:String = "js"
20           var programeSourceUrl:String = "http://xxxx.com/adfd.js"
21           var maxExecuteSecounds:Long=20
23 init() { 24 println("browser script init") 25 } 26 27 28 execute 29 30 } 31 32 extenstion BrowserScript:Executable { 33 execute() { 34 JavaCoreScript.run(programeSourceUrl); 35 } 36 } 37 38 39 //test: 40 41 func executeTask<T:Executable>(executor:T) { 42 executor.execute(); 43 } 44 45 46 executeTask(BrowserScript()); //不會報錯 47 48 49

 經過協議再不修改BrowserScript類定義文件的前提下, 爲BrowserScript增長了execute的能力.
 extenstion 能夠用在ios內置,各類庫,本身編寫的任意類,函數體,Enum,由於基本數據類型實際是結構體,因此也能夠extension功能.swift

 在swift官方的實現中大量使用extension實現功能,swift是面向協議擴展的語言.閉包

 

3. swift的問號函數

   swift 問號相似 var card:String? ,有問號表示這個變量能夠爲空(nil),實際也是Optional枚舉類型,有值時候用Optional.Some()包裝,使用時候須要解包,若是爲nil實際爲Optional.None().網站

   解包的方法就是spa

 

 if let card = card {
     println("your card is ",card);
  }  

 

4. Int,Long,String,Dictionary,Array 其實都是結構體,struct.code

  結構體和類的區別就是,結構體傳值都是內存拷貝, 類引用通常都是引用.對象

 

5. weak 關鍵字.

  weak 關鍵字表示弱引用, 就是擁有這個weak變量的對象不持有這個變量的引用.引用計數是內存回收的一種方法,爲0時系統負責回收內存,若是對象A包含屬性B強引用屬性,直接a=nil, B 不會回收. 若是屬性B設置爲弱引用,自己設置屬性b, b的引用計數不增加. weak用在此屬性能夠爲空的狀況.

6.unowned 關鍵字. 

  unowned 至關於weak,不過這個屬性不能爲空.屬性被設置爲空,程序崩潰直接退出.因此不多用.

7. 函數/方法.

   7.1 方法定義:

func method1(_ x1:Int,_ x2 :Int) ->Int {

      //do something 
}
var  sum = method1(1,2);

上面的參數中的下劃線是外參數名 ,位置在形參x1前面 ,若是是下劃線,表示調用時候不用寫外參名稱.若是是有名字,調用時候須要寫外參數名,加入第二個參數的下劃線替換成num2,調用時須要寫成:

 

var sum2 = method1(1,num2:2);

 

最後的->表示以後跟着的是返回值 ,返回值能夠是一個值,也能夠是函數(方法).

 

方法能夠直接寫閉包(匿名函數) .

 

舉例: 學生報名到學校, 返回流程處理函數, 具體就是執行了發送短信叫家長交學費. 返回的函數參數是家長的相關聯繫方式. 

func add(student:Student,to school:School) ->(String)->{sendMsgToParentsFee($0);}

上面的返回值是最後那個參數是String類型,具體執行是{}包含着的函數.裏面的$0 表示參數中的第一個參數,多個參數依次累加表示.

 

調用 : 

    x.add(student:studentObj,to:schoolObj)

相關文章
相關標籤/搜索