swift4 1 系統學習十三 結構體 一

2021-09-20 02:30:02 字數 3244 閱讀 6770

/*

結構體大部分語言中都會有結構體。swift中的結構體屬於四大基本型別(函式、列舉、結構體、類)之一,他屬於值型別。

標準庫中的很多態別都是結構體型別,像int、float、string、array。

swift中的結構體還有很多靈活的語法特性:

可定義儲存式例項與型別屬性;

可定義計算式例項與型別屬性;

可使用屬性觀察者;

可定義例項與型別方法;

可定義初始化器;

可定義陣列下標;

可對結構體進行擴充套件;

可遵循協議。

// 1. 結構體基本語法

do

/// 例項方法

func study()

}/// 建立結構體的例項,訪問其屬性以及例項方法

var xiaoming = mystruct()

print("\(xiaoming.name), \(xiaoming.age), \(xiaoming.nationality)")

xiaoming.study()

xiaoming.nationality = "新加坡"

print("\(xiaoming.name)修改了國籍,去了\(xiaoming.nationality)")// 2. 儲存式例項屬性

/*儲存式例項屬性是結構體與類型別中最簡單的屬性形式。我們直接在這些型別中使用var或者let來宣告

乙個變數或者常量,另外也可以直接對它們進行初始化,那麼這些宣告在型別中的物件就成為該型別的儲存式

例項屬性。

*/do

var test = test()

test.language += "、英語"

test.array += [4, 5]

var test2 = test

test2.language = "西班牙語"

test2.array.removelast()

print("test = \(test)")

print("test2 = \(test2)")

// 小結:由此可以看出,struct是值型別。// 3. 惰性儲存式屬性(懶載入)

/*當乙個物件例項被建立的時候,其所有的儲存式例項屬性都會完成初始化。不過,有時候,我們會將一些

耗費資源的屬性宣告成惰性儲存式屬性,當我們使用的時候才會去建立它。

惰性儲存屬性在宣告的時候在前面加上 lazy 關鍵字。並且只能用var來宣告,不能用let,這個就不用解釋了。

*/do

struct test

var test = test()

print("test被建立了")

// 第一次訪問

test.prop += 10

// 第二次訪問

print("test.prop = \(test.prop)")// 4. 計算式屬性

/*swift 是一門主張簡潔、直觀的程式語言。如果一些屬性可以不通過使用者的輸入獲得,而是通過已有的屬性計算

獲得,我們就可以使用計算式屬性。

*/do

set

}/// 計算屬性:周長

var perimeter: double

set

}/// 計算屬性: 面積

var area: double

set

}}var circle = circle()

circle.radius = 3.0

print("直徑: \(circle.diameter), 周長: \(circle.perimeter), 面積: \(circle.area)")

/* 注意:

計算式屬性的setter方法可以預設,但是getter方法不可以預設。如果setter方法省略了,那麼這個

計算式屬性就變成了唯讀屬性。

*//// 再舉乙個」矩形「的例子

struct rect

}/// 周長

/// 如果只有getter方法,get {} 關鍵字可以省略

var perimeter:double

/// 面積

var area: double

}var rect = rect()

rect.width = 2.0

rect.height = 3.0

print("對角線: \(rect.diagonal), 周長: \(rect.perimeter), 面積: \(rect.area)")// 5. 屬性觀察者

/*有時候為了邏輯上的簡化需要,我們可能需要獲取某個儲存屬性的值當前被修改了,從而可以做一些輸入值的過濾

或者其他操作。swift中使用」屬性觀察者「這一語法特性,從而提供了針對儲存式屬性值的變化的響應。

關鍵字:

willset:指定屬性修改前,會呼叫它的willset方法;

didset:指定屬性修改後,會呼叫didset。

*/do

// 注意:隱式引數oldvalue

didset

}}var test = test()

test.number = 10

test.number = 20// 6.型別屬性

/*之前介紹的都是例項屬性,例項屬性的特點就是當前列舉、結構體、類等型別的物件例項各自持有各自的

例項屬性,它們佔據著物件例項自身的儲存空間。

型別屬性:型別屬性就屬於型別自己,與用該型別所建立的例項無關。

宣告方法很簡單:

在前面加上 static 關鍵字就可以了。

*/do

set

}static var str = "hello"

didset

}static let si = 1.5

// 注意,這兩個變數可以重名,不會報錯。

var si = -1

}var test = test()

test.si += 2

print("例項屬性 si = \(test.si)")

print("型別屬性 si = \(test.si)")

test.ti += 100

print("型別屬性 ti = \(test.ti)")

test.cp += 5

test.str += ",小雨"

func foo()

/// 這裡的呼叫的test是foo中的test

print("foo ti = \(test.ti)")

print("foo si = \(test.si)")

}foo()

swift4 1 系統學習一

swift學習筆記1 簡介swift出現的目的 為了簡化macos和ios開發 特點 1.開源 2.跨平台 3.物件導向的程式語言 4.程式設計正規化豐富 面向過程,物件導向,函式式程式設計 5.安全性 swift學習筆記2 基本型別體系 1.列舉 enum 2.結構體 struct 3.類 cla...

swift4 1 系統學習九 Optional

main.swift swift09 created by ios on 2018 9 29.import foundation swift學習筆記9 optional 可選型別 可選型別是swift特色之一,也是很多初學者不適應的原因之一。optional體現了swift對型別的安全性考慮。特點 ...

Swift 系統學習 06 迴圈語句

playground noun a place where people can play import uikit 本節主要內容 1.迴圈語句 for index in 0.10 需求 計算2的10次方 var result 1 var basevalue 2 下劃線 是忽略迴圈次數 忽略區間運算...