亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift 3.0基礎學習之類與結構體

2020-03-09 17:46:17
字體:
來源:轉載
供稿:網友

前言

和其他語言不同的是,Swift不需要為自定義的類和結構體創建接口和實現文件。只需要創建單一文件用來創建類和結構體,其他的外部接口的代碼系統會自動生成。下面這篇文章主要介紹了關于Swift 3.0類與結構體的內容,感興趣的朋友一起來看看吧。

類和結構體區別

Swift的類和結構體具有以下相同的特點:

  • 可以定義屬性來保存值
  • 可以定義方法來提供功能
  • 可以定義下標來使用他們的值
  • 可以定義初始化器來配置他們的初始化狀態
  • 可以在默認的實現上擴展他們的功能
  • 遵從協議來提供標準的功能

類具有結構體沒有的額外的功能:

  • 繼承允許某一個類繼承另外一個類的特性
  • 類型轉換允許你檢查并在運行時解釋一個類實例的類型
  • 析構器允許釋放所有該類已經賦值的實例資源
  • 引用計數允許多個引用一個類的實例

結構體一般來說賦值的時候是直接拷貝的,沒有使用引用計數的機制。

符號定義

下面是一個定義結構體和類的例子:

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

結構體初始化的時候可以直接

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

這點和類不一樣,類沒有默認的逐個成員的初始化器。

結構體和枚舉是值類型

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

再賦值

cinema.width = 2048

結果

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.westlet rememberedDirection = currentDirectioncurrentDirection = .eastif rememberedDirection == .west { print("The remembered direction is still .west")}// Prints "The remembered direction is still .west"

類是引用類型

例如:

let tenEighty = VideoMode()tenEighty.resolution = hdtenEighty.interlaced = truetenEighty.name = "1080i"tenEighty.frameRate = 25.0

進行賦值引用

let alsoTenEighty = tenEightyalsoTenEighty.frameRate = 30.0

結果

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

標識符

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

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

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

選擇使用類和結構體

由于結構體的實例一般是值傳遞,而類實例一般是引用傳遞,因此你需要根據實際情況來考慮應該定義一個類還是結構體.

如有以下一種或多仲情況使用結構體:

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

看看幾個使用結構體恰當的例子:

  • 幾何圖形的大小,可以封裝width和height屬性,都是Double類型
  • 指向連續序列范圍的方法,可以封裝start和length屬性,都是Int類型
  • 一個在3D坐標系統的點, 可以封裝x, y和z屬性,都是Double類型

其他的情況請定義類并創建類實例,管理和傳遞都使用引用。

在實踐中,大部分的自定義數據結構都是使用類居多,很少使用結構體。

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品久久| 尤物99国产成人精品视频| 久久中文字幕国产| 亚洲一区二区中文| 国产日产亚洲精品| 一区二区三区视频免费| 国产一区二区激情| 中文字幕在线视频日韩| 国产精品96久久久久久| 亚洲aaa激情| 久久精品国产综合| 91高清免费在线观看| 欧美性受xxxx黑人猛交| 国内精品模特av私拍在线观看| 国产丝袜视频一区| 亚洲成人中文字幕| 亚洲最新在线视频| xxx成人少妇69| 国产色综合天天综合网| 大荫蒂欧美视频另类xxxx| 国产999在线观看| 日韩在线视频观看| 欧美超级乱淫片喷水| 久久精品亚洲94久久精品| 国产精品av在线| 国产精品白嫩美女在线观看| 欧美诱惑福利视频| 亚洲电影免费在线观看| 狠狠躁天天躁日日躁欧美| 911国产网站尤物在线观看| 欧美成人精品三级在线观看| 国产精品丝袜久久久久久高清| 亚洲成av人片在线观看香蕉| 98精品国产高清在线xxxx天堂| 色老头一区二区三区在线观看| 久久精品国产久精国产思思| 欧美国产亚洲精品久久久8v| 久久久天堂国产精品女人| 日韩av在线播放资源| 久久久久久噜噜噜久久久精品| 91精品国产综合久久香蕉| 91午夜理伦私人影院| 92福利视频午夜1000合集在线观看| 最近2019年中文视频免费在线观看| 岛国精品视频在线播放| 日韩久久免费电影| 97超级碰碰人国产在线观看| 久久影院模特热| 在线性视频日韩欧美| 亚洲一区二区久久久久久| 久久免费精品日本久久中文字幕| 日韩av影视综合网| 日韩电影免费在线观看中文字幕| 亚洲字幕一区二区| 国产精品视频专区| 亚洲欧美色婷婷| 亚洲福利视频专区| 国产午夜精品免费一区二区三区| 91视频88av| 亲子乱一区二区三区电影| 国产精品老牛影院在线观看| 欧美成人一区二区三区电影| 欧美国产高跟鞋裸体秀xxxhd| 色综合天天综合网国产成人网| 色偷偷av一区二区三区乱| 日韩av在线免费| 中文字幕精品一区久久久久| 自拍视频国产精品| 久久久久久久久久久免费精品| 日本欧美精品在线| 亚洲qvod图片区电影| 亚洲国产一区自拍| 色综合久久天天综线观看| 中文字幕日韩精品在线观看| 中文字幕国产精品| 国产成人精品午夜| 国产精品久久久av久久久| 日韩激情视频在线播放| 精品亚洲一区二区三区在线观看| 成人在线视频福利| 久久久国产精品视频| 欧美日韩激情视频8区| 国产精品第一区| 日韩乱码在线视频| 国产精品电影一区| 亚洲国产高清高潮精品美女| 欧美一级大片视频| 色老头一区二区三区| 亚洲欧美中文日韩v在线观看| 97视频免费观看| 欧美成人免费在线视频| 狠狠色噜噜狠狠狠狠97| 欧美高清videos高潮hd| 正在播放欧美一区| 日本成熟性欧美| 国产精品亚洲片夜色在线| 91久久综合亚洲鲁鲁五月天| 亚洲欧洲在线视频| 久久久精品久久久| 综合激情国产一区| 国产伦精品免费视频| 在线亚洲国产精品网| 中文字幕欧美专区| 欧美国产日韩一区二区三区| 亚洲国产福利在线| 亚洲色在线视频| 久久香蕉国产线看观看网| 美女福利精品视频| 国产精品一久久香蕉国产线看观看| 亚洲精品久久久久久久久久久| 亚洲欧美第一页| 国产精品狼人色视频一区| 欧美巨猛xxxx猛交黑人97人| 亚洲精品久久久久久久久久久| 国产成人精品视频在线观看| 亚洲一区二区三区四区视频| 91精品久久久久久久久青青| 欧美丝袜一区二区三区| 日韩电影在线观看免费| 中文日韩在线观看| 亚洲女人天堂网| 国产精品电影在线观看| 日韩欧美一区视频| 国产精品久久不能| 欧美丰满少妇xxxx| 欧美限制级电影在线观看| 狠狠色香婷婷久久亚洲精品| 亚洲女人天堂成人av在线| 国产精品视频网| 日韩一区二区三区在线播放| 一区二区三区视频观看| 日本国产一区二区三区| 伊人伊成久久人综合网站| 久99九色视频在线观看| 日韩在线精品一区| 亚洲欧美日韩国产精品| 中文字幕av一区二区三区谷原希美| 亚洲一区二区三区成人在线视频精品| 92看片淫黄大片欧美看国产片| 久久99热这里只有精品国产| 久久久国产精品x99av| 日日摸夜夜添一区| 欧美日韩激情视频8区| 久久精品国产96久久久香蕉| 91性高湖久久久久久久久_久久99| 国产欧美最新羞羞视频在线观看| 国产精品亚洲综合天堂夜夜| 亚洲人成欧美中文字幕| 日韩av大片在线| 久久综合色88| 午夜精品一区二区三区视频免费看| 91中文精品字幕在线视频| 亚洲激情免费观看| 日韩av网站在线| 国产精品久久久久久婷婷天堂| 国外日韩电影在线观看| 欧美成人精品不卡视频在线观看| 日韩av免费一区| 91精品国产高清久久久久久| 久久99视频精品| 欧美猛少妇色xxxxx| 亚洲精品久久久久中文字幕欢迎你| 久久久久久中文| 久久av资源网站|