swift學習第十六天:懶加載和tableView


懶加載

懶加載的介紹

  • swift中也有懶加載的方式
    • (蘋果的設計思想:希望所有的對象在使用時才真正加載到內存中)
  • 和OC不同的是swift有專門的關鍵字來實現懶加載
  • lazy關鍵字可以用於定義某一個屬性懶加載

懶加載的使用

  • 格式
lazy var 變量: 類型 = { 創建變量代碼 }() 
  • 懶加載的使用
    // 懶加載的本質是,在第一次使用的時候執行閉包,將閉包的返回值賦值給屬性 // lazy的作用是只會賦值一次 lazy var array : [String] = { () -> [String] in return ["why", "lmj", "lnj"] }() 

import UIKit

class ViewController: UIViewController {
    
    lazy var names : [String] = {
        
        print("------")
        
        return ["why", "yz", "lmj"]
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        _ = names.count
        _ = names.count
        _ = names.count
        _ = names.count
        _ = names.count
        _ = names.count
    }
}
import UIKit

class ViewController: UIViewController {
    
    // MARK:- 懶加載的屬性
    /// tableView的屬性
    lazy var tableView : UITableView = UITableView()
    
    // MARK:- 系統回調函數
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
    }
}

// MARK:- 設置UI界面相關
extension ViewController {
    /// 設置UI界面
    func setupUI() {
        // 0.將tableView添加到控制器的View中
        view.addSubview(tableView)
        
        // 1.設置tableView的frame
        tableView.frame = view.bounds
        
        // 2.設置數據源
        tableView.dataSource = self
        
        // 3.設置代理
        tableView.delegate = self
    }
}


// MARK:- tableView的數據源和代理方法:1:設置代理多個代理用,隔開 2:相當於oc的#pragma:// MARK:-  2:若是沒有介詞,則用下划線來表示:_ tableView

// extension類似OC的category,也是只能擴充方法,不能擴充屬性
extension ViewController : UITableViewDataSource, UITableViewDelegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 1.創建cell:
        let CellID = "CellID"
        var cell = tableView.dequeueReusableCell(withIdentifier: CellID)
        
        if cell == nil {
            // 在swift中使用枚舉: 1> 枚舉類型.具體的類型 2> .具體的類型
            cell = UITableViewCell(style: .default, reuseIdentifier: CellID)
        }
        
        // 2.給cell設置數據:cell為可選類型,從緩存池中取出的cell可為空,所以為可選類型,最后返回cell的時候要進行強制解包,此時已經保證了可選類型不為空,若為空強制解包會為空
        cell?.textLabel?.text = "測試數據:\((indexPath as NSIndexPath).row)"
        
        // 3.返回cell
        return cell!
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("點擊了:\((indexPath as NSIndexPath).row)")
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM