欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift中的類class與結(jié)構(gòu)體struct體學習筆記

 更新時間:2016年07月01日 18:32:13   作者:琿少  
和C++一樣,Swfit中同時擁有類與結(jié)構(gòu)體,能夠充分滿足開發(fā)者面向?qū)ο蠛兔嫦蜻^程編程的需求,這里我們就來看一下Swift中的類class與結(jié)構(gòu)體struct體學習筆記

一、引言
Swift中的類與結(jié)構(gòu)體十分相似,和Objective-C不同的事,Swift中的結(jié)構(gòu)體不僅可以定義屬性,也可以像類一樣為其定義方法。

Swift中的類與結(jié)構(gòu)體有如下相似點:

1.定義屬性來存儲值。

2.定義函數(shù)來提供功能。

3.通過定義下標語法使用下標的方式取值。

4.定義構(gòu)造方法來對其進行初始化。

5.通過擴展來在原始基礎(chǔ)上添加功能。

6.通過協(xié)議來定義實現(xiàn)標準。

當然類和結(jié)構(gòu)體也有許多不同點,下面這些功能是類獨有的,結(jié)構(gòu)體沒有:

1.通過繼承來創(chuàng)建類的子類。

2.在運行時允許對類的實例進行類型的檢查和解釋。

3.析構(gòu)方法可以釋放被類引用的資源。

4.通過引用計數(shù)允許一個類實例的多處引用。

當開發(fā)者在代碼中傳遞這些實例時,結(jié)構(gòu)體總是被賦值,而類則是被引用。這是結(jié)構(gòu)體和類的最本質(zhì)區(qū)別。

二、類與結(jié)構(gòu)體的定義

類與結(jié)構(gòu)體在定義語法上相似,示例代碼如下:

class MyClass {
  var name = "HS"
  var age = 25
}
struct MyStruct {
  var param1:Int
  var param2:String
}
//創(chuàng)建類的實例
var obj1 = MyClass()
//創(chuàng)建結(jié)構(gòu)體的實例 所有結(jié)構(gòu)體會默認生成一個逐個設(shè)置屬性的構(gòu)造方法 而類不會
var obj2 = MyStruct(param1: 1,param2: "1")
//可以通過點語法來獲取類或者結(jié)構(gòu)體中的屬性值
print(obj1.age,obj2.param1)

通過示例間的傳遞,可以證明Swift中類被引用于結(jié)構(gòu)體被復(fù)制這樣的特點,示例如下:

//將類實例傳遞給另一個變量
var obj3 = obj1
//將結(jié)構(gòu)體實例傳遞給另一個變量
var obj4 = obj2
//修改變臉的值
obj3.name = "NewHS"
obj4.param1 = 2
//將 打印 NewHS 1 //說明類是被引用的 結(jié)構(gòu)體則被賦值
print(obj1.name,obj2.param1)

注意:在實例傳遞時同樣采用復(fù)制原理的還有枚舉類型。

由于類是通過引用來進行傳遞,Swift中還提供了一種運算符用來比較兩個實例變量或常量是否指向同一個引用,示例如下:

if obj1===obj3{
  print("same refer")
}else if obj1 !== obj3 {
  print("not same refer")
}

實際上,===與!==運算符比較的是指針內(nèi)容。

三、類和結(jié)構(gòu)體的選擇

由于類和結(jié)構(gòu)體有著不同的傳遞機制,因此其也適用于不同的開發(fā)任務(wù),下面這些情況下,官方推薦開發(fā)者使用結(jié)構(gòu)體來創(chuàng)建數(shù)據(jù)類型:

1.該數(shù)據(jù)類型封裝少量的簡單數(shù)據(jù)值。

2.該類型數(shù)據(jù)來傳遞時,應(yīng)該被復(fù)制。

3.該類型中定義的數(shù)據(jù)類型在傳遞時也應(yīng)該被賦值。

4.不需要通過集成另一個數(shù)據(jù)類型而來。

除了上面列舉的一些情況,其它情況下,都推薦開發(fā)者使用類來描述數(shù)據(jù),這也是開發(fā)中最后常用的手段。

相關(guān)文章

  • 快速排序算法在Swift編程中的幾種代碼實現(xiàn)示例

    快速排序算法在Swift編程中的幾種代碼實現(xiàn)示例

    快速排序是一種不穩(wěn)定的排序,存在著優(yōu)化空間,這里我們來看快速排序算法在Swift編程中的幾種代碼實現(xiàn)示例:
    2016-07-07
  • R.swift的使用與安裝教程

    R.swift的使用與安裝教程

    這篇文章主要給大家介紹了關(guān)于R.swift使用與安裝的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Swift教程之屬性詳解

    Swift教程之屬性詳解

    這篇文章主要介紹了Swift教程之屬性詳解,屬性是描述特定類、結(jié)構(gòu)或者枚舉的值,計算屬性存在于類、結(jié)構(gòu)與枚舉中,存儲屬性僅僅只在類與結(jié)構(gòu)中,需要的朋友可以參考下
    2015-01-01
  • Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例

    Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPr

    這篇文章主要為大家介紹了Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • switch實現(xiàn)一個兩數(shù)的運算代碼示例

    switch實現(xiàn)一個兩數(shù)的運算代碼示例

    這篇文章主要介紹了switch實現(xiàn)一個兩數(shù)的運算代碼示例,需要的朋友可以參考下
    2017-06-06
  • Swift心得筆記之字符串

    Swift心得筆記之字符串

    Swift 的 String 類型是值類型 。 如果您創(chuàng)建了一個新的字符串,那么當其進行常量、變量賦值操作或在函數(shù)/方法中傳遞時,會進行值拷貝。 任何情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進行傳遞或賦值操作。
    2015-04-04
  • swift 3.0 正則表達式查找/替換字符的實現(xiàn)代碼

    swift 3.0 正則表達式查找/替換字符的實現(xiàn)代碼

    正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。本文重點給大家介紹swift 3.0 正則表達式查找/替換字符的實現(xiàn)代碼,需要的朋友參考下吧
    2017-08-08
  • Swift中閉包實戰(zhàn)案例詳解

    Swift中閉包實戰(zhàn)案例詳解

    接觸過Swift的小伙伴對“閉包”應(yīng)該不陌生,相當于OC中的Block,是Swift語法中比較難理解的一塊。下面這篇文章主要介紹了關(guān)于Swift中閉包實戰(zhàn)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • 分析Swift性能高效的原因

    分析Swift性能高效的原因

    絕大多數(shù)公司選擇Swift語言開發(fā)iOS應(yīng)用,主要原因是因為Swift相比Objc有更快的運行效率,更加安全的類型檢測,更多現(xiàn)代語言的特性提升開發(fā)效率;這一系列的優(yōu)點使Swift語言的熱度越來越高。
    2020-10-10
  • Swift設(shè)置UILabel內(nèi)邊距的實例代碼

    Swift設(shè)置UILabel內(nèi)邊距的實例代碼

    有時候,我們需要一個顯示文字,又想這些文字與邊界之間有自定義的邊距,所以下面這篇文章主要給大家介紹了關(guān)于Swift設(shè)置UILabel內(nèi)邊距的相關(guān)資料,需要的朋友可以參考下
    2021-10-10

最新評論