你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS_Swift_深入理解閉包 對比懶加載和普通賦值的區別

IOS_Swift_深入理解閉包 對比懶加載和普通賦值的區別

編輯:IOS開發綜合

定義一個字符串的變量的方法:

//直接賦值
var str="JobDeer"
//閉包方式
var str:String={
  return "JobDeer"
}()
//簡化閉包,省略了等號和括號:
var str:String{
  return "JobDeer"
}

 

 

//閉包中可以定義get、set方法。  
var str:String{
  get{
    return "JobDeer"
  }  
  set{
    println("set ok")
  }
}
//注意用willSet/didSet不能和get/set共同使用的,在使用willSet /didSet時,變量需要有初始值。 所以這麼使用:  
var str:String="JobDeer"{
  willSet{
    println("newValue:\(newValue)")
  }
  didSet{
    println("oldValue:\(oldValue)")
  }
}
str="new value"
//最全的定義形式是
{
  (arguments) ->returnType  in 
  code 
}(arguments)
 
var str={
    (arg1:String,arg2:String)->String in
        return arg1+arg2;
}("Job","Deer")

//基於上面最全的定義方式, 我麼可以省略參數的類型:  
var str={
    arg1,arg2->String in
        return arg1+arg2;
}("Job","Deer")
//swift的類型推導,根據後面括號的傳參能自動判斷參數的類型。

//然後我們可以省略閉包中的返回值類型
var str:String={
    arg1,arg2 in
        return arg1+arg2;
}("Job","Deer")

//繼續簡化
var str:String={
        return $0+$1;
}("Job","Deer")
   
//如果閉包中只有一行代碼, 其實return 也能省略。
var str:String={
         $0+$1;
}("Job","Deer")

//如果閉包沒有定義參數 ,像這樣
var str:String={
       return "JobDeer"
}()

//括號中根本沒有傳參數,可以把括號省略了.省略括號的同時等號也不能寫
var str:String{
       return "JobDeer"
}
//////普通賦值
var i = 0
var up:Int?{
    i = i+1
    return i
}
for _ in 0...2{
    print("-->\(up!)")
}
//-->1
//-->2
//-->3
//閉包執行,I增加

//////懶加載
var id = 10
class Animal {
    lazy var addID:Int? = {
        id++
        return id
    }()
    
    init(){
    }
}

let anim = Animal()
print(anim.addID!)
print(anim.addID!)
//11
//11
//閉包執行,anim.addID並未再次增加


 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved