swift中修飾詞,fileprivate、private、internal、public 、open 及lazy的使用

在swift開發語言中,訪問修飾符就fileprivate、private、internal、public 、open這五種。其中fileprivate和open是swift3中添加的;因爲以前的swift對於訪問控制是基於文件的,在swift3中就出現問題,就添加兩個修飾符對原來的private和public進行細分,是的swift訪問更加靈活,程序耦合行下降。swift

 

一、private:所修飾的屬性或者方法,只能在當前的類中訪問。閉包

二、fileprivate:訪問級別所修飾的屬性或者方法在當前的swift源文件裏能夠訪問;框架

三、internal:默認屬性,在這個源代碼所在的模塊或者整個APP代碼均可以訪問。當時框架或者庫代碼則在這個框架內部均可以訪問,框架外部引用時則不能夠。ide

四、public:公共的,能夠被任何使用。可是其餘module中不能夠被override和繼承,而在module內能夠被override和繼承。性能

5.open:能夠被任何人使用,包括override和繼承。優化

 

5中修飾訪問權限排序:spa

open>public>interal>fileprivate>private對象

 

lazy:懶加載、延遲加載或者惰性初始化屬性 。一些對象的屬性和內容很是複雜時,在構建對象時同時屬性和會被建立分配內存,這樣和會消耗很多時間;另外有些對象最初不會當即使用到,默認會建立時就會初始化,這樣無疑也是一種浪費對性能影響也會較大;一次lazy關鍵字的使用是很常見的優化方法,有助於代碼維護。排序

lazy在爲屬性修飾符,只能修飾變量,變量關鍵字var,使用let的常量實例化時賦值;使用場景是一個對象的屬性依賴於其它屬性。繼承

swift中有兩種實現機制:

簡潔代碼,只須要一行便可實現,聲明格式:lazy var 變量名:類型

  1. lazy var tableView:UITableView = UITableView()

   若想作些邏輯上的處理,swift中容許在屬性後面定義一個閉包,閉包返回值是默認值;必須注意最後的小括號,只有加了小括號,閉包纔會調用馬上執行;使用[unowned self]避免循環使用

    2. lazy  var tableView:UITableView = {[unowned self] in

        let tableView = UITableView(frame: CGRectMake(0, 0, SCREENW,SCREENH),style:UITableViewStyle.Plain)

        tableView.separatorStyle = UITableViewCellSeparatorStyle.None

        tableView.showsVerticalScrollIndicator = false

        tableView.contentSize = CGSizeMake(SCREENW + 50, SCREENH - 49)

        return tableView

     }()

相關文章
相關標籤/搜索