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

Swift 3.0基礎(chǔ)學(xué)習(xí)之?dāng)U展

 更新時間:2017年03月13日 09:35:59   作者:Mellong  
擴展是向一個已有的類、結(jié)構(gòu)體或枚舉類型添加新的功能(在swift中擴展沒有名字)。相當(dāng)于Objective-C中Category(OC中可以有名字的,而且只能擴展類)。這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之?dāng)U展的相關(guān)資料,需要的朋友可以參考下。

介紹

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

在 Swift 中,擴展可以做到:

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

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

擴展語法

使用關(guān)鍵字 extension 定義擴展:

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

擴展可以擴充現(xiàn)有的類型使之可以適應(yīng)一個或多個協(xié)議:

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

計算屬性

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

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.mm
print("One inch is \(oneInch) meters")
// Prints "One inch is 0.0254 meters"
let threeFeet = 3.ft
print("Three feet is \(threeFeet) meters")
// Prints "Three feet is 0.914399970739201 meters"

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

可以直接進行運算:

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

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

初始化器

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

下面定義幾個結(jié)構(gòu)體:

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()
}

我們可以這樣來創(chuàng)建 Rect 實例(關(guān)于默認(rèn)初始化器可以查看初始化部分的文章):

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

這時,我們可以擴展 Rect 結(jié)構(gòu)體,為其添加新的初始化器:

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)
 }
}

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

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()
  }
 }
}

然后我們可以這樣調(diào)用這個方法:

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

變異實例方法

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

如下面的例子:

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

下標(biāo)

想實現(xiàn)

  • 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 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7

如果下標(biāo)越界,則返回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
  }
 }
}

現(xiàn)在嵌套的類型可以在任何 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

總結(jié)

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

相關(guān)文章

  • Swift教程之類的析構(gòu)詳解

    Swift教程之類的析構(gòu)詳解

    這篇文章主要介紹了Swift教程之類的析構(gòu)詳解,在一個類的實例被釋放之前,析構(gòu)函數(shù)會被調(diào)用,本文即講解了析構(gòu)過程原理、析構(gòu)器操作等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Swift使用CollectionView實現(xiàn)廣告欄滑動效果

    Swift使用CollectionView實現(xiàn)廣告欄滑動效果

    這篇文章主要為大家詳細(xì)介紹了Swift使用CollectionView實現(xiàn)廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Swift利用CoreData實現(xiàn)一個通訊錄存儲詳解

    Swift利用CoreData實現(xiàn)一個通訊錄存儲詳解

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData實現(xiàn)一個通訊錄存儲的相關(guān)資料,本文是大家學(xué)習(xí)coreDate的基礎(chǔ)問題,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 分析Swift性能高效的原因

    分析Swift性能高效的原因

    絕大多數(shù)公司選擇Swift語言開發(fā)iOS應(yīng)用,主要原因是因為Swift相比Objc有更快的運行效率,更加安全的類型檢測,更多現(xiàn)代語言的特性提升開發(fā)效率;這一系列的優(yōu)點使Swift語言的熱度越來越高。
    2020-10-10
  • swift 錯誤處理do catch try try!使用詳解

    swift 錯誤處理do catch try try!使用詳解

    這篇文章主要介紹了swift 錯誤處理do catch try try!使用詳解的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • swift中AnyObject和Any的介紹與區(qū)別詳解

    swift中AnyObject和Any的介紹與區(qū)別詳解

    雖然使用swift開發(fā)了一段時間,但是感覺對一些基礎(chǔ)的東西了解不是比較透徹,在查詢了許多資料以后還是打算自己動手記錄一下,下面這篇文章主要給大家介紹了關(guān)于swift中AnyObject和Any的介紹與區(qū)別的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • swift版webview加載網(wǎng)頁進度條效果

    swift版webview加載網(wǎng)頁進度條效果

    這篇文章主要為大家詳細(xì)介紹了swift實現(xiàn)webview加載網(wǎng)頁進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Swift、Objective-C、Cocoa混合編程設(shè)置指南

    Swift、Objective-C、Cocoa混合編程設(shè)置指南

    這篇文章主要介紹了Swift、Objective-C、Cocoa混合編程設(shè)置指南,需要的朋友可以參考下
    2014-07-07
  • Swift中非可選的可選值類型處理方法詳解

    Swift中非可選的可選值類型處理方法詳解

    Optional是Objective-C沒有的數(shù)據(jù)類型,是蘋果引入到Swift語言中的全新類型,它的特點就和它的名字一樣:可以有值,也可以沒有值,當(dāng)它沒有值時,就是nil。下面這篇文章主要給大家介紹了關(guān)于Swift中非可選的可選值類型處理方法的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • Swift 編程語言入門教程

    Swift 編程語言入門教程

    今天在網(wǎng)上看到一篇非常好的Swift 編程語言入門教程,分享給大家
    2014-08-08

最新評論

耿马| 河池市| 新乡县| 砚山县| 玉林市| 抚顺市| 台东县| 淮安市| 万宁市| 沧源| 湖口县| 息烽县| 安徽省| 峨眉山市| 嘉善县| 鹤峰县| 叶城县| 朝阳区| 承德市| 九江市| 宜春市| 苍山县| 鄂州市| 靖安县| 泗洪县| 海宁市| 晋城| 营口市| 外汇| 视频| 阿拉尔市| 海原县| 筠连县| 延津县| 西丰县| 焉耆| 应用必备| 隆化县| 丹寨县| 温州市| 凤翔县|