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

首頁 > 編程 > Swift > 正文

Swift 3.0基礎學習之擴展

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

介紹

擴展可以為類,結構體,枚舉和協議添加新的功能。包括可以對沒有源碼訪問權限的類型進行擴展。擴展和 Objective-C 分類 的概念類似。(和 Objective-C 的分類不一樣的是,Swift 擴展沒有名稱)。

在 Swift 中,擴展可以做到:

  • 添加計算的實例屬性和計算的類型屬性
  • 定義實例方法和類型方法
  • 提供新的初始化器
  • 定義下標
  • 定義并使用新的嵌套類型
  • 使現有類型符合協議

值得注意的是:擴展可以為類型添加功能,但是不可以重寫現有的功能。

擴展語法

使用關鍵字 extension 定義擴展:

extension SomeType { // new functionality to add to SomeType goes here}

擴展可以擴充現有的類型使之可以適應一個或多個協議:

extension SomeType: SomeProtocol, AnotherProtocol { // implementation of protocol requirements goes here}

計算屬性

擴展可以為現有的類型添加計算實例屬性和計算類型屬性:

extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 }}let oneInch = 25.4.mmprint("One inch is /(oneInch) meters")// Prints "One inch is 0.0254 meters"let threeFeet = 3.ftprint("Three feet is /(threeFeet) meters")// Prints "Three feet is 0.914399970739201 meters"

由于這些屬性是只讀計算屬性,所以他們不需要加入關鍵字 get。

可以直接進行運算:

let aMarathon = 42.km + 195.mprint("A marathon is /(aMarathon) meters long")// Prints "A marathon is 42195.0 meters long"

值得注意的是:擴展可以添加新的計算屬性,但是他們不可以添加存儲屬性,或者為現有的屬性添加屬性觀察器。

初始化器

擴展可以向類添加新的方便初始化器,但是它們不能向類添加新的指定的初始化器或取消初始化器。 指定的初始化器和取消初始化器必須始終由原始類實現提供。

下面定義幾個結構體:

struct Size { var width = 0.0, height = 0.0}struct Point { var x = 0.0, y = 0.0}struct Rect { var origin = Point() var size = Size()}

我們可以這樣來創建 Rect 實例(關于默認初始化器可以查看初始化部分的文章):

let defaultRect = Rect()let memberwiseRect = Rect(origin: Point(x: 2.0, y: 2.0),       size: Size(width: 5.0, height: 5.0))

這時,我們可以擴展 Rect 結構體,為其添加新的初始化器:

extension Rect { init(center: Point, size: Size) {  let originX = center.x - (size.width / 2)  let originY = center.y - (size.height / 2)  self.init(origin: Point(x: originX, y: originY), size: size) }}

然后我們就可以使用新的初始化方法來創建實例:

let centerRect = Rect(center: Point(x: 4.0, y: 4.0),      size: Size(width: 3.0, height: 3.0))// centerRect's origin is (2.5, 2.5) and its size is (3.0, 3.0)

方法

下面是為Int 類型添加一個叫repetitions的方法:

extension Int { func repetitions(task: () -> Void) {  for _ in 0..<self {   task()  } }}

然后我們可以這樣調用這個方法:

3.repetitions { print("Hello!")}// Hello!// Hello!// Hello!

變異實例方法

添加了擴展的實例方法也可以修改(或變異)實例本身。 修改self或其屬性的結構和枚舉方法必須將實例方法標記為mutating,就像原始實現中的突變方法一樣。

如下面的例子:

extension Int { mutating func square() {  self = self * self }}var someInt = 3someInt.square()// someInt is now 9

下標

想實現

  • 123456789[0] 返回 9
  • 123456789[1] 返回 8

代碼如下:

extension Int { subscript(digitIndex: Int) -> Int {  var decimalBase = 1  for _ in 0..<digitIndex {   decimalBase *= 10  }  return (self / decimalBase) % 10 }}746381295[0]// returns 5746381295[1]// returns 9746381295[2]// returns 2746381295[8]// returns 7

如果下標越界,則返回0:

746381295[9]// returns 0, as if you had requested:0746381295[9]

嵌套類型

擴展添加嵌套類型:

extension Int { enum Kind {  case negative, zero, positive } var kind: Kind {  switch self {  case 0:   return .zero  case let x where x > 0:   return .positive  default:   return .negative  } }}

現在嵌套的類型可以在任何 Int 值中使用:

func printIntegerKinds(_ numbers: [Int]) { for number in numbers {  switch number.kind {  case .negative:   print("- ", terminator: "")  case .zero:   print("0 ", terminator: "")  case .positive:   print("+ ", terminator: "")  } } print("")}printIntegerKinds([3, 19, -27, 0, -6, 0, 7])// Prints "+ + - 0 - 0 + "

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

總結

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情精品在线| 日本精品久久久久久久| 92版电视剧仙鹤神针在线观看| 欧美精品第一页在线播放| 国产精品青草久久久久福利99| 久色乳综合思思在线视频| 久久天天躁狠狠躁夜夜躁| 欧美精品videofree1080p| 在线成人一区二区| 91视频国产一区| 欧美成人精品xxx| 日产精品久久久一区二区福利| 色综合天天狠天天透天天伊人| 久久综合国产精品台湾中文娱乐网| 亚洲久久久久久久久久久| 国产精品久久久久久久久借妻| 毛片精品免费在线观看| 奇门遁甲1982国语版免费观看高清| 搡老女人一区二区三区视频tv| 欧美高清电影在线看| 亚洲国产高清福利视频| 国产精品99久久久久久久久久久久| 久久精视频免费在线久久完整在线看| 91久久久亚洲精品| 中文字幕日韩av综合精品| 国产在线播放不卡| 热久久视久久精品18亚洲精品| 国产一区二区三区视频免费| 亚洲国产精品福利| 一本色道久久88精品综合| 国产精品电影久久久久电影网| 日本精品久久久久久久| 性欧美长视频免费观看不卡| 国产精品99久久久久久久久| 日韩在线激情视频| 国产精品一区二区三区久久久| 亚洲精品福利在线观看| 91精品视频在线看| 丝袜亚洲欧美日韩综合| 欧美麻豆久久久久久中文| 久久久久久美女| 亚洲欧美制服综合另类| 亚洲片在线观看| 91精品国产高清久久久久久91| 亚洲欧美一区二区三区久久| 日韩视频精品在线| 51精品国产黑色丝袜高跟鞋| 中文字幕日韩av| 欧美老少做受xxxx高潮| 国产精品久久久久福利| 国产精品爱啪在线线免费观看| zzijzzij亚洲日本成熟少妇| 欧洲永久精品大片ww免费漫画| 亚洲品质视频自拍网| 久久精品国产久精国产思思| 狠狠躁18三区二区一区| 欧美做受高潮电影o| 91理论片午午论夜理片久久| 国模精品一区二区三区色天香| 欧美日韩福利在线观看| 欧美激情综合色| 亚洲美女性视频| 国产一区二区三区在线| 韩国精品美女www爽爽爽视频| 亚洲国产私拍精品国模在线观看| 欧美日韩中国免费专区在线看| 亚洲男人天堂古典| 久久av资源网站| 国产精品视频永久免费播放| 欧美成aaa人片在线观看蜜臀| 亚洲欧美中文字幕在线一区| 欧美又大又硬又粗bbbbb| 亚洲乱码一区二区| 亚洲男人天堂九九视频| 精品国内亚洲在观看18黄| 国产精品极品美女粉嫩高清在线| 美日韩精品视频免费看| 国产精品久久久精品| 欧美日韩免费网站| 91国内揄拍国内精品对白| 91免费综合在线| 庆余年2免费日韩剧观看大牛| 国产伦精品免费视频| 亚洲国产精品久久精品怡红院| 久久99视频免费| 欧美亚洲视频在线看网址| 国产精品视频白浆免费视频| 欧美日韩在线视频一区二区| 欧美日韩一区二区免费在线观看| 日本高清+成人网在线观看| 另类专区欧美制服同性| 人人做人人澡人人爽欧美| 欧美日韩国产一区二区三区| 国产精品久久婷婷六月丁香| 亚洲精选在线观看| 国产精品美腿一区在线看| 91精品综合久久久久久五月天| 日韩精品日韩在线观看| 国产97色在线| 亚洲国产精品va| 欧美专区在线播放| 大桥未久av一区二区三区| 青草青草久热精品视频在线观看| 久久久亚洲欧洲日产国码aⅴ| 欧美大片在线看免费观看| 九九热视频这里只有精品| 国产精品视频专区| 久久这里有精品| 欧美激情第6页| 国产精品免费电影| 中文字幕日本精品| 亚洲精品久久久久久下一站| 一区二区国产精品视频| 日本19禁啪啪免费观看www| 国产精品爽爽ⅴa在线观看| 日本一本a高清免费不卡| 91久久精品美女高潮| 91午夜在线播放| 亚洲国产日韩欧美综合久久| 亚洲色在线视频| 亚洲精品久久7777777| 久久国产精品电影| 亚洲老头老太hd| 久久久欧美精品| 91在线看www| 国产精品久久婷婷六月丁香| 国产精品777| 欧美乱人伦中文字幕在线| 亚洲欧美日韩中文视频| 国产在线观看精品一区二区三区| 国产精品va在线播放我和闺蜜| 精品国产拍在线观看| 亚洲一区二区三区视频播放| www.日本久久久久com.| 美女性感视频久久久| 97精品国产91久久久久久| 色悠悠久久久久| 国产精品福利在线观看网址| 精品欧美国产一区二区三区| 91久久久国产精品| 影音先锋欧美在线资源| 狠狠久久五月精品中文字幕| 日韩电影中文字幕| 国产精品色午夜在线观看| 国产日韩欧美在线视频观看| 日韩在线欧美在线国产在线| 日本精品久久久久久久| 色综合色综合网色综合| 国产精品久久久久久久久久新婚| 自拍视频国产精品| 亚洲国产精品女人久久久| 欧美日韩国产色| 日韩成人在线观看| 欧美视频专区一二在线观看| 欧美国产日韩二区| 亚洲a∨日韩av高清在线观看| 国产亚洲成精品久久| 日韩欧美在线播放| 日韩国产高清污视频在线观看| 亚洲成人精品久久久| 中文字幕日韩在线视频| 色综合伊人色综合网站| 国产精品久久久av| 日韩成人在线电影网|