類和對象的方法與屬性---懶載入與私有事件---單例與私有化構造函數

来源:http://www.cnblogs.com/panda1024/archive/2016/12/24/6216495.html
-Advertisement-
Play Games

對象屬性: 1、private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問(徹底私有) 2、fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問(部分私有) 3、直接用let或var修飾的屬性:在本類、分類和外部都可以訪問(開放) 4、在分類中只能聲明計算屬性,不能聲明存儲 ...


對象屬性:

1、private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問(徹底私有)

2、fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問(部分私有)

3、直接用let或var修飾的屬性:在本類、分類和外部都可以訪問(開放)

4、在分類中只能聲明計算屬性,不能聲明存儲屬性

1     // 屬性:可以被外界訪問
2     var name:String?
3     
4     // private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問
5     private var age:String?
6     
7     // fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問
8     fileprivate var gender:String?
 1 import UIKit
 2 
 3 class Person: NSObject {
 4     
 5 }
 6 
 7 extension Person{
 8     
 9     // 分類中只能聲明計算屬性,不能聲明存儲屬性
10     var desc:String{
11         return "我是小明"
12     }
13 }

類屬性:

1、在本類中使用class修飾的屬性,調用時《類名.屬性名》

2、在分類中使用static修飾的屬性(註意:分類中只能定義計算屬性,不能定義存儲屬性),調用時《類名.屬性名》

1     // class修飾本類屬性:通過《類名.屬性名》進行訪問
2     class var classAttribute:String{
3         return "I'm the classAttribute."
4     }
5     
6     // static修飾分類中計算屬性:通過《類名.屬性名》進行訪問
7     static var staticAttribute:String{
8         return "I'm the staticAttribute."
9     }

對象方法:

1、直接用func修飾,本類、分類、外界都可以調用(開放)

2、用private修飾,只有在本類中可以調用(徹底私有)

3、用fileprivate修飾,在本類、分類中可以訪問,外部不能訪問(部分私有)

 1     // 直接用func的方法,本類、分類、外界都可以調用
 2     func sayHi() -> Void {
 3         
 4     }
 5     // 只有在本類中可以調用
 6     private func sayHi3(){
 7         
 8     }
 9     // 只有在本類、分類中調用
10     fileprivate func sayHi2() -> (){
11     
12     }

類方法:

1、在本類中使用class修飾類方法

2、在分類中使用static修飾類方法

 1 class Person: NSObject {
 2     
 3     // 在本類中,類方法用class修飾
 4     class func sayHi() -> (){
 5         print("Hello world,I'm the class method.")
 6     }
 7 }
 8 
 9 // extension 相當於OC 中的分類
10 extension Person{
11     
12     // 在分類中,類方法用static修飾
13     static func sayHello() -> Void{
14         print("Hello world,I'm the static method.")
15     }
16 }

 懶載入與私有事件:

懶載入的關鍵字用lazy修飾,有三種創建方法

private修飾的事件,要想添加給按鈕,前面必須用@objc修飾

 1 import UIKit
 2 
 3 class Person: NSObject {
 4     
 5     // 懶載入方式一:直接創建
 6     private lazy var msgLabel = UILabel()
 7     
 8     // 懶載入方式二:使用對象方法創建,方法名前要加self
 9     private lazy var content:String = self.createContent()
10     
11     // 懶載入方式三:使用閉包創建
12     // swift懶載入用lazy修飾,代碼只執行一次,哪怕對象nil了,也不會再次執行
13     // OC中的懶載入是重寫get方法,當對象為nil時,會重新載入
14     // swift中懶載入使用閉包方式時,閉包可以省略 () in ,直接返回對象即可
15     private lazy var button:UIButton = {
16         let button = UIButton()
17         
18         // swift中使用#selector給按鈕添加事件,註意帶參數寫法(btn:)
19         // OC中使用@selector給按鈕添加事件
20         button.addTarget(self, action: #selector(buttonAction(btn:)), for: .touchUpInside)
21         
22         return button
23     }()
24     
25     
26     // private修飾的事件函數,在Swift運行迴圈裡面找不到
27     // 解決方法:使用oc,基於運行時使用kvc動態派發調用該事件,@objc告訴編譯器使用oc的機制去調用這個事件
28     @objc private func buttonAction(btn:UIButton){
29         
30     }
31     
32     func createContent() -> String{
33         return "創建的內容"
34     }
35 }

單例:用static修飾

私有化構造函數,外部不可以通過《類名()》創建對象,只能訪問單例,更嚴謹

 1 import UIKit
 2 
 3 class Person: NSObject {
 4     
 5     // 單例對象,用static修飾
 6     static let currentPerson:Person = Person()
 7     
 8     // 使用閉包方式創建單例對象
 9     static let sharedPerson:Person = {
10         let per = Person()
11         return per
12     }()
13     
14     // 私有化構造函數,外界不可以通過《Person()》創建對象,只能訪問單例對象
15     private override init() {
16         super.init()
17     }
18 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Jasmine的開發團隊來自PivotalLabs,他們一開始開發的JavaScript測試框架是JsUnit,來源於著名的JAVA測試框架JUnit。JsUnit是xUnit的JavaScript實現。但是JsUnit在2009年後就已經停止維護了,他們推出了一個新的BDD框架Jasmine。Ja ...
  • input[text] input一般和ngModel結合使用來實現雙向綁定,同時angular提供了很多表單校驗的指令 required 必填 ngRequired 必填(ngRequired可以控制是否是必填校驗) ngMinlength 最小長度 ngMaxlength 最大長度 patter ...
  • JQuery學習之操作類數組的工具方法 在很多時候,JQuery的$()函數都返回一個類似數據的JQuery對象,例如$(‘div’)將返回div裡面的所有div元素包裝的JQuery對象。在這中情況下,JQuery提供了幾個常用的屬性和方法來操作JQuery對象。 length:該屬性返回JQue ...
  • 在前端開發中,我們會頻繁的修改html、css、js,然後刷新頁面,開效果,再調整,再刷新,不知不覺會浪費掉我們很多時間。有沒有什麼方法,我在編輯器裡面改了代碼以後,只要保存,瀏覽器就能實時刷新。經過不懈的努力,發現了這麼一個工具 livereload。這是一款能根據你本地文件(html、css、j ...
  • Q1:常用的運算符有哪些?他們的優先順序是怎樣的?A1:1.算術運算符:加(+)、減(-)、乘(×)、除(÷),自加一(++),自減一(--);2.比較運算符:大於(>)、小於(<)、大於等於(>=)、小於等於(<=);3.邏輯運算符:與(&&)、或(||)、非(!);優先順序為:算術操作符 > 比較操 ...
  • 突然感覺不知道寫啥子,腦子裡面沒水了,可能是因為今晚要出去浪,哈哈~~~提前提醒大家平安夜要回家哦,聖誕節生00000000000這麼多蛋。。。。繼續 上一篇的已經把bootstrap瞭解個大概了,接下來我們就開始學習一下它裡面的東西。 瀏覽器支持 舊的瀏覽器可能無法很好的支持 Bootstrap ...
  • 體驗效果:http://hovertree.com/texiao/css3/39/這是一個使用純CSS3實現的圖文切換效果,沒使用js腳本。點擊左右箭頭或者索圓點引按鈕可以切換內容。本特效中使用到了CSS3的新選擇器 nth-of-type(n),:nth-of-type(n) 選擇器匹配屬於父元素 ...
  • 一、行內元素水平居中 text-align: center; 二、行內元素垂直居中 height: 40px;line-height: 40px; 讓這兩個值相等 三、塊級元素水平居中 width: 300px; margin: 0 auto; 可以不設置高度 三、塊級元素垂直居中 1.固定寬高塊級 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...