Swift 的類和物件

2021-09-11 13:00:44 字數 2705 閱讀 5946

類的定義

類定義的關鍵字是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

函式也是同樣的修飾詞和許可權,只是類的繼承對應函式的過載許可權。 函式除了以上幾個,常用的修飾詞還有staticoverride

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...