最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift 3.0基礎(chǔ)學(xué)習(xí)之類與結(jié)構(gòu)體

 更新時(shí)間:2017年03月13日 08:31:49   作者:Mellong  
最近在學(xué)swift 3.0,主要看的是蘋果的官方文檔,這里只是根據(jù)自己看官方文檔的理解所做的一些記錄,不是完整的翻譯,希望也對(duì)你有所幫助。下面這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之類與結(jié)構(gòu)體的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

和其他語言不同的是,Swift不需要為自定義的類和結(jié)構(gòu)體創(chuàng)建接口和實(shí)現(xiàn)文件。只需要?jiǎng)?chuàng)建單一文件用來創(chuàng)建類和結(jié)構(gòu)體,其他的外部接口的代碼系統(tǒng)會(huì)自動(dòng)生成。下面這篇文章主要介紹了關(guān)于Swift 3.0類與結(jié)構(gòu)體的內(nèi)容,感興趣的朋友一起來看看吧。

類和結(jié)構(gòu)體區(qū)別

Swift的類和結(jié)構(gòu)體具有以下相同的特點(diǎn):

  • 可以定義屬性來保存值
  • 可以定義方法來提供功能
  • 可以定義下標(biāo)來使用他們的值
  • 可以定義初始化器來配置他們的初始化狀態(tài)
  • 可以在默認(rèn)的實(shí)現(xiàn)上擴(kuò)展他們的功能
  • 遵從協(xié)議來提供標(biāo)準(zhǔn)的功能

類具有結(jié)構(gòu)體沒有的額外的功能:

  • 繼承允許某一個(gè)類繼承另外一個(gè)類的特性
  • 類型轉(zhuǎn)換允許你檢查并在運(yùn)行時(shí)解釋一個(gè)類實(shí)例的類型
  • 析構(gòu)器允許釋放所有該類已經(jīng)賦值的實(shí)例資源
  • 引用計(jì)數(shù)允許多個(gè)引用一個(gè)類的實(shí)例

結(jié)構(gòu)體一般來說賦值的時(shí)候是直接拷貝的,沒有使用引用計(jì)數(shù)的機(jī)制。

符號(hào)定義

下面是一個(gè)定義結(jié)構(gòu)體和類的例子:

struct Resolution {
 var width = 0
 var height = 0
}
class VideoMode {
 var resolution = Resolution()
 var interlaced = false
 var frameRate = 0.0
 var name: String?
}

結(jié)構(gòu)體初始化的時(shí)候可以直接

let vga = Resolution(width: 640, height: 480)

這點(diǎn)和類不一樣,類沒有默認(rèn)的逐個(gè)成員的初始化器。

結(jié)構(gòu)體和枚舉是值類型

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd

再賦值

cinema.width = 2048

結(jié)果

print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"

然而hd.width還是1920

print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"

可見賦值過程是做了一次深度拷貝。

枚舉也是具有同樣的行為, 如以下例子,rememberedDirection的值并沒有改變:

enum CompassPoint {
 case north, south, east, west
}
var currentDirection = CompassPoint.west
let rememberedDirection = currentDirection
currentDirection = .east
if rememberedDirection == .west {
 print("The remembered direction is still .west")
}
// Prints "The remembered direction is still .west"

類是引用類型

例如:

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

進(jìn)行賦值引用

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

結(jié)果

print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// Prints "The frameRate property of tenEighty is now 30.0"

標(biāo)識(shí)符

  • 完全相同(===)
  • 不完全相同(!===)
if tenEighty === alsoTenEighty {
 print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// Prints "tenEighty and alsoTenEighty refer to the same VideoMode instance."

完全相同(===)和等于(==)是不一樣的:

  • 完全相同意思是兩個(gè)類類型的常量或者變量指向完全相同的類實(shí)例
  • 等于意思是兩個(gè)實(shí)例被認(rèn)為值相同或者相等, 可以自行定義==操作符來進(jìn)行判斷兩個(gè)實(shí)例在某種意義上是相等的

選擇使用類和結(jié)構(gòu)體

由于結(jié)構(gòu)體的實(shí)例一般是值傳遞,而類實(shí)例一般是引用傳遞,因此你需要根據(jù)實(shí)際情況來考慮應(yīng)該定義一個(gè)類還是結(jié)構(gòu)體.

如有以下一種或多仲情況使用結(jié)構(gòu)體:

  • 結(jié)構(gòu)體主要的目的是封裝少量的相關(guān)性簡單數(shù)據(jù)值
  • 在結(jié)構(gòu)體的實(shí)例賦值或者傳遞的時(shí)候,需要考慮到封裝好的值會(huì)被拷貝而不是引用是否是合理的
  • 任何保存于結(jié)構(gòu)體的屬性都是值類型的,他們也是期望被賦值或者傳遞時(shí)是拷貝而不是引用
  • 結(jié)構(gòu)體不需要從其他存在的類型繼承屬性或者行為

看看幾個(gè)使用結(jié)構(gòu)體恰當(dāng)?shù)睦樱?/p>

  • 幾何圖形的大小,可以封裝width和height屬性,都是Double類型
  • 指向連續(xù)序列范圍的方法,可以封裝start和length屬性,都是Int類型
  • 一個(gè)在3D坐標(biāo)系統(tǒng)的點(diǎn), 可以封裝x, y和z屬性,都是Double類型

其他的情況請(qǐng)定義類并創(chuàng)建類實(shí)例,管理和傳遞都使用引用。

在實(shí)踐中,大部分的自定義數(shù)據(jù)結(jié)構(gòu)都是使用類居多,很少使用結(jié)構(gòu)體。

String、Array和Dictionary的賦值和拷貝行為

String, Array和 Dictionary都是結(jié)構(gòu)體,因此賦值直接是拷貝,而NSString, NSArray 和NSDictionary則是類,所以是使用引用的方式。

參考英語原文:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-ID82

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 深入理解swift變量和函數(shù)

    深入理解swift變量和函數(shù)

    Swift 函數(shù)用來完成特定任務(wù)的獨(dú)立的代碼塊。這篇文章主要介紹了swift變量和函數(shù)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • Swift設(shè)置UILabel內(nèi)邊距的實(shí)例代碼

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

    有時(shí)候,我們需要一個(gè)顯示文字,又想這些文字與邊界之間有自定義的邊距,所以下面這篇文章主要給大家介紹了關(guān)于Swift設(shè)置UILabel內(nèi)邊距的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Swift仿微信語音通話最小化時(shí)后的效果實(shí)例代碼

    Swift仿微信語音通話最小化時(shí)后的效果實(shí)例代碼

    這篇文章主要介紹了Swift仿微信語音通話最小化時(shí)后的效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Swift?reduce函數(shù)使用示例詳解

    Swift?reduce函數(shù)使用示例詳解

    這篇文章主要為大家介紹了Swift?reduce函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案

    openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案

    這篇文章主要介紹了解決openstack重啟swift服務(wù)后報(bào)錯(cuò),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Flutter iOS開發(fā)OC混編Swift動(dòng)態(tài)庫和靜態(tài)庫問題填坑

    Flutter iOS開發(fā)OC混編Swift動(dòng)態(tài)庫和靜態(tài)庫問題填坑

    這篇文章主要為大家介紹了Flutter iOS OC 混編 Swift動(dòng)態(tài)庫和靜態(tài)庫問題填坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Swift 3.0基礎(chǔ)學(xué)習(xí)之下標(biāo)

    Swift 3.0基礎(chǔ)學(xué)習(xí)之下標(biāo)

    這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之下標(biāo)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用swift具有一定的參考價(jià)值,需要的朋友下面來一起看看吧。
    2017-03-03
  • R.swift的使用與安裝教程

    R.swift的使用與安裝教程

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

    Swift?中的?RegexBuilder學(xué)習(xí)指南

    這篇文章主要為大家介紹了Swift中的RegexBuilder學(xué)習(xí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

长岭县| 炎陵县| 仲巴县| 手机| 吉木乃县| 博野县| 孝感市| 宁化县| 政和县| 新乡市| 巴里| 民勤县| 中牟县| 邛崃市| 邵武市| 荔波县| 方正县| 翁源县| 蕲春县| 辛集市| 旅游| 乌拉特后旗| 江西省| 寻乌县| 鹤山市| 卫辉市| 盱眙县| 榆树市| 榆社县| 霸州市| 林周县| 紫金县| 东丰县| 宜君县| 六枝特区| 布拖县| 邹平县| 公安县| 巨野县| 邮箱| 万州区|