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

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)于默認初始化器可以查看初始化部分的文章):

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?framework使用OC?代碼兩種方式示例

    swift?framework使用OC?代碼兩種方式示例

    這篇文章主要為大家介紹了swift?framework使用OC?代碼兩種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Swift初始化器與可選鏈的使用方法介紹

    Swift初始化器與可選鏈的使用方法介紹

    初始化器初始化是準(zhǔn)備類、結(jié)構(gòu)或枚舉的實例以供使用的過程。此過程涉及為該實例上的每個存儲屬性設(shè)置初始值,并執(zhí)行在新實例準(zhǔn)備就緒可供使用之前所需的任何其他設(shè)置或初始化,可選鏈?zhǔn)且环N可以請求和調(diào)用屬性、方法和子腳本的過程,用于請求或調(diào)用的目標(biāo)可能為nil
    2022-08-08
  • Swift中的訪問控制和protected

    Swift中的訪問控制和protected

    這篇文章主要介紹了Swift中的訪問控制和protected,本文主要講解為什么Swift沒有類似protected的選項,需要的朋友可以參考下
    2015-05-05
  • Objective-c代碼如何移植為Swift代碼 Objective-c代碼轉(zhuǎn)移到Swift過程介紹

    Objective-c代碼如何移植為Swift代碼 Objective-c代碼轉(zhuǎn)移到Swift過程介紹

    這篇文章主要介紹了Objective-c代碼如何移植為Swift代碼,Objective-c代碼轉(zhuǎn)移到Swift過程介紹,需要的朋友可以參考下
    2014-07-07
  • iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法

    iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法

    這篇文章主要介紹了iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Swift如何為設(shè)置中心添加常用功能

    Swift如何為設(shè)置中心添加常用功能

    這篇文章主要給大家介紹了關(guān)于Swift如何為設(shè)置中心添加常用功能的相關(guān)資料,包含了跳轉(zhuǎn)到AppStore、郵件反饋功能、系統(tǒng)分享功能以及打開某些網(wǎng)址等功能,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-05-05
  • Swift中swift中的switch 語句

    Swift中swift中的switch 語句

    本文給大家介紹了swift中的swift語句,以及和c語音中的寫法區(qū)別,本文介紹的非常詳細,需要的朋友參考下
    2016-12-12
  • Swift?Error重構(gòu)的基礎(chǔ)示例詳解

    Swift?Error重構(gòu)的基礎(chǔ)示例詳解

    這篇文章主要為大家介紹了Swift?Error基礎(chǔ)錯誤處理的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱

    RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱

    這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)教程之Observable的相關(guān)資料,文中詳細的給大家介紹了關(guān)于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Swift中的指針操作和使用詳細介紹

    Swift中的指針操作和使用詳細介紹

    這篇文章主要介紹了Swift中的指針操作和使用詳細介紹,Apple期望在Swift中指針能夠盡量減少登場幾率,因此在Swift中指針被映射為了一個泛型類型,并且還比較抽象,本文詳細講解了Swift中指針的相關(guān)知識,需要的朋友可以參考下
    2015-01-01

最新評論