swift小結02-基礎篇

碼鋒窩發表於2016-07-17
閉包
     類似於 OC 中的 Block,是一段預先定義好的程式碼,在需要時執行
 
閉包表示式格式:
 { (形參名稱1: 形參型別1, 形參名稱2: 形參型別2, ...) -> 返回值 `in`
          //要執行的程式碼
  }
in 用於區分閉包定義和程式碼實現
 
  //定義有引數a的閉包
    let coluse = { (a:String)->Void in
        print("xxxxx\(a)")
    }
   
    //定義無引數的閉包
    let coluse1 = {
       
    }
    let coluse2 = {()->Void in
       
    }
 
 // 尾隨閉包
        // 當閉包是最後一個引數的時候, 將閉包放在引數整個()外面
        UIView.animateWithDuration(0, animations: { () -> Void in
            print("aa")
        })
 

閉包使用場景(回撥)
  //1.定義閉包
        let cal = {(result:String)->Void in
            print("閉包的引數是\(result)")
        }
        //呼叫方法
        loadDate(cal)
 
    }

    //2.建立方法,閉包callback:(String)->Void作為方法的引數
    func loadDate(callback:(String)->Void) ->Void{
        //非同步
        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
            //2
            NSThread.sleepForTimeInterval(2)
            //回到主執行緒
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                //設定回撥的引數
                let callString = "什麼鬼"
                //3.呼叫回撥
                callback(callString)
            })
        }
    }
 

定義類
  • ( )裡面是空,表示呼叫類的預設建構函式 = [[類名 alloc] init];
  •   例項化一個類:
      var 變數名 = 類名()
class 類名: 父類名 {
      //: 一些屬性
      //: 一些方法
  }
 
注意:
  1.Swift的繼承和OC一樣是通過:, Swift也只有單繼承
 2.訪問類的屬性和呼叫類的方法都是通過.來進行的
  3.覆蓋父類方法, 需要加關鍵字 override
 
類的屬性
    • OC 中的屬性:
      • @property(noatomic, copy) NSString *name;
        • 1.在.h宣告 getter 和 setter 方法
        • 2.在.m實現 getter 和 setter 方法
        • 3.在.m生成 _成員變數
    • Swift 中屬性分為:儲存型屬性計算型屬性
      • 儲存型屬性: 儲存資料
      • 屬性監視器: 當儲存型屬性發生改變的時候,通知我們屬性發生了改變,可用於監視值的改變
        • willSet: 在屬性將要發生改變時呼叫
        • didSet: 在屬性已經發生改變時呼叫(常用)
 
計算型屬性: 不儲存任何資料,只生成 gettersetter,當只提供 get 方法時,稱之為只讀計算屬性.必須要有 get 方法
      • 計算型屬性 相當於 OC 中的 @property 生成的 gettersetter 方法,只不過 setter 方法沒有給 _成員變數 賦值

    // 儲存型屬性: 專門負責儲存資料的
    /*
        儲存型屬性有屬性監視器:監視值的改變
            1.willSet: 值在改變前呼叫,瞭解,一般用不到
            2.didSet: 值改變後呼叫, 這個用的多,如重新整理列表資料
    */newValue表示之前的值
    var name: String = "liudehua" {
        willSet {
            print("值改變前: \(newValue)")
        }
       
        didSet {
            print("值改變後: \(name)")
        }
    }
   
    // 計算型屬性: 提供getset方法,裡面寫什麼程式碼根據業務需求來
    // 當計算性屬性,只提供get方法時,成為只讀計算性屬性,不能只有set沒有get
    var nikeName: String {
        get {
            return "hehe"
        }
        set {
            // newValue就是外面設定的值
            print("別人設定了 nikeName 屬性,值為 \(newValue)")
        }
    }
    

建構函式
作用:在物件例項化過程中給所有的儲存型屬性設定初始值,並且執行必要的準備和初始化任務.
便利建構函式
    • 便利建構函式: 它是輔助性的建構函式.方便建立物件
    • 預設情況下,所有的建構函式都是指定建構函式 Designated
    • convenience 關鍵字修飾的構造方法就是便利建構函式
    • 便利建構函式可以返回 nil
    • 需要呼叫本類的一個指定建構函式
 
建構函式小結
    • 1.不需要func關鍵字.名稱是固定的,都叫 init
    • 2.如果子類沒有實現建構函式.會繼承父類的建構函式
    • 3.子類建構函式需要呼叫父類建構函式
    • 4.需要先初始化子類屬性,在呼叫父類建構函式
    • 5.子類一旦實現了建構函式.就不會繼承父類的建構函式
 
 // 建構函式給屬性賦值
    // 建構函式,先給自己的屬性賦值,在呼叫父類的建構函式
    override init() {
        self.name = "liudehua"
        super.init()
    }
   
    // 過載: 函式名稱一樣,但是引數不一樣
    init(name: String) {
      // 先給自己的屬性賦值
        self.name = name
        super.init()
    }
//子類與父類不能有相同名字的屬性,但是不是繼承關係的兩個類可以有相同名字的屬性和方法
    //便利建構函式
    convenience init?(stu_name:String,stu_grade:Float){
        if stu_grade < 0 || stu_grade > 100{
            print("非人類分數")
            return nil
        }
        //需要呼叫自身的指定建構函式或便利建構函式,不能呼叫父類的
        self.init(name:stu_name,grade:stu_grade)
    }
   
   
    convenience init?(s_name:String,s_grade:Float){
        //呼叫自身的便利建構函式
        self.init(stu_name:s_name,stu_grade:s_grade)
    }
 

懶載入
      // 懶載入方式1
    lazy var person: Person = Person(name: "小強", age: 20)
    lazy var arr: NSArray = NSArray()
    // 懶載入方式2(完整寫法)
    lazy var person2: Person = { () -> Person in
        let p = Person(name: "強強", age: 22)
       
        return p
    }()
   
    //(預設寫法)除了建立物件,還可以做一些初始化操作
    lazy var person2: Person = {
        let p = Person(name: "強強", age: 22)
        // 此處來1000行程式碼
        let p1 = NSArray()
        return p
    }()

 待續。。。
 
 
 

相關文章