類的定義
類定義的關鍵字是class
,我們用class
+類名+ ":" +父類,比如定義乙個person
類,類中去宣告和定義變數和函式:
class
person: nsobject }
複製**
類的擴充套件
extension
person
}複製**
儲存屬性
儲存屬性就是儲存在類或者結構體乙個例項裡的乙個常量和變數,用var
或者let
修飾。
但是如果乙個結構體例項被宣告為常量,那麼即便這個結構體的某個屬性是變數,也是不能去改變的:
let point = cgpoint(x: 1, y: 1)
point.x = 10
// 編譯是不會通過的
複製**
延遲儲存屬性
lazy
var namelabel:uilabel = ()
複製**
其實就是把乙個立即執行的閉包的返回值賦值給屬性,以達到懶載入的目的。
屬性觀察器
willset
在新的值被設定之前呼叫didset
在新的值被設定之後立即呼叫 需要注意的是:當為儲存型屬性設定預設值或者在構造器中為其賦值時,它們的值是被直接設定的,不會觸發任何屬性觀察者。
計算屬性
class
person: nsobject
}}複製**
唯讀計算屬性
當乙個屬性只有getter
而沒有setter
時,那麼它就是乙個唯讀計算屬性
類物件的例項和訪問:
var person = person()
person.age = 10
複製**
我們可以給person
自定義乙個建構函式,建構函式中需要給所有的儲存型屬性乙個賦值或者預設值:
init(name: string)
複製**
這樣我們就可以用name
來例項化乙個物件:var person = person(name:"tom")
如果所有屬性都有預設值,我們沒有自定義的構造,系統會生成乙個預設的建構函式:var person = person()
相應的,如果我們自定義了乙個建構函式,那麼系統便不會為該類生成預設的建構函式。 但是,我們可以把自定義的建構函式寫到類的擴充套件(extension
)裡,而不是類的原始定義裡面。
與建構函式對應的是析構函式:deinit
指定構造器和便利構造器指定構造器裡面會初始化類例項所有的屬性,所以為了保證繼承的屬性也能被初始化,子類的指定構造器都會呼叫父類的指定構造器,而類的便利構造器總是會呼叫本類的指定構造器。 也就是說:指定構造器需要向上呼叫,便利構造器需要橫向呼叫
所以,我們可以把父類的指定建構函式重寫成便利構造,卻不能重寫父類的便利構造。即便重寫了父類的便利建構函式,但是由於我們不能直接呼叫父類的便利建構函式,所以不用給函式以override
修飾。
必要構造器如果某個建構函式被required
修飾,那麼該函式就是必要建構函式,子類繼承該類時都必須要實現改建構函式。在子類重寫父類的建構函式的時候,也要加required
來修飾,以確定繼承鏈上子類的子類也遵守。
除了構造和析構函式,類還有例項的私有函式、公共函式和靜態函式。
swift
中的訪問控制有模組和原始檔兩個概念。用 "import" 匯入的就是模組。
對於類而言的修飾詞與許可權:
修飾詞許可權
open
修飾的類可以隨意繼承與訪問
public
修飾的類只能在本模組內被繼承,但是可以隨便訪問
internal
預設 - 模組內擁有訪問許可權
fileprivate
是檔案外部不能被訪問
private
是檔案內部不能被訪問
final
是檔案內部也不能被繼承
當然了,對於乙個internal
的類,其屬性和方法的級別是不會超出類本身的,比如不可能是public
。
函式也是同樣的修飾詞和許可權,只是類的繼承對應函式的過載許可權。 函式除了以上幾個,常用的修飾詞還有static
和override
。
static
修飾的是類方法。override
修飾的是重寫父類的方法。
我的部落格:iosgg.cn/
swift的類和物件
1 類的關鍵字 是class。類裡面可以有常量,變數,和函式。成員變數 每個變數都要賦初值 class shape 生成乙個shape類的物件 相當於我們oc 中的 shape s shape alloc init 可以通過 去點到他們的例項變數和方法。var s shape print s的邊數為...
Swift學習之路 物件和類
使用class和類名來建立乙個類,類中屬性的宣告和常量 變數宣告一樣,唯一的區別就是它們的上下文是類。同理,函式和方法也一樣 class shape 要建立乙個類的例項,在類名後面加上括號。使用點語法在訪問例項的屬性和方法 var shape shape shape.numberofsides 7 ...
IOS中的Swift基礎(類和物件)
person.swift import foundation 類是一類物體的共有性抽象 物件是某一類的乙個具體 class person nsobject 該方法是為了解決字典裡面的一些 key值,在該模型裡面沒有導致的系統崩潰 override func setvalue value anyobj...