国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Swift - Swift心得筆記之集合類型

Swift心得筆記之集合類型

2020-12-19 15:47Swift教程網 Swift

本文為大家講解的是swift語言中的集合類型數據,這是swift開發必須掌握的知識點,感興趣的同學參考下。

數組

重復值的初始化

除了普通的初始化方法,我們可以通過 init(count: Int, repeatedValue: T) 來初始化一個數組并填充上重復的值:

 

復制代碼 代碼如下:

// [0.0,0.0,0.0]
var threeDoubles = [Double](count:3,repeatedValue:0.0)

 

帶索引值的遍歷

我們可以用 for in 遍歷數組,如果想要 index 的話,可以用 enumerate<Seq : SequenceType>(base: Seq) :

 

復制代碼 代碼如下:

let arr = ["a","b"]
for (index, value) in enumerate(arr) {
    println("\(index):\(value)")
}
// 0:a
// 1:b

 

賦值與拷貝

Swift 中數組和字典均是結構體的形式實現的,和 NSArray 那一套不太一樣,所以賦值的時候其實是給了一份拷貝:

 

復制代碼 代碼如下:

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

 

高階函數

Swift 有一些 Higher Order Functions :map、filter和reduce。使用得當的話可以省去很多不必要的代碼。

map

map 可以把一個數組按照一定的規則轉換成另一個數組,定義如下:

 

復制代碼 代碼如下:

func map<U>(transform: (T) -> U) -> U[]

 

也就是說它接受一個函數叫做 transform ,然后這個函數可以把 T 類型的轉換成 U 類型的并返回 (也就是 (T) -> U),最終 map 返回的是 U 類型的集合。

下面的表達式更有助于理解:

 

復制代碼 代碼如下:

[ x1, x2, ... , xn].map(f) -> [f(x1), f(x2), ... , f(xn)]

 

如果用 for in 來實現,則需要這樣:

 

復制代碼 代碼如下:

var newArray : Array<T> = []
for item in oldArray {
    newArray += f(item)
}

 

舉個例子,我們可以這樣把價格數組中的數字前面都加上 ¥ 符號:

 

復制代碼 代碼如下:

var oldArray = [10,20,45,32]
var newArray = oldArray.map({money in "¥\(money)"})
println(newArray) // [¥10, ¥20, ¥45, ¥32]

 

如果你覺得 money in 也有點多余的話可以用 $0 :

 

復制代碼 代碼如下:

newArray = oldArray.map({"\($0)€"})

 

filter

方法如其名, filter 起到的就是篩選的功能,參數是一個用來判斷是否篩除的篩選閉包,定義如下:

 

復制代碼 代碼如下:

func filter(includeElement: (T) -> Bool) -> [T]

 

還是舉個例子說明一下。首先先看下傳統的 for in 實現的方法:

 

復制代碼 代碼如下:

var oldArray = [10,20,45,32]
var filteredArray : Array<Int> = []
for money in oldArray {
    if (money > 30) {
        filteredArray += money
    }
}
println(filteredArray)

 

奇怪的是這里的代碼編譯不通過:

 

復制代碼 代碼如下:

Playground execution failed: <EXPR>:15:9: error: 'Array<Int>' is not identical to 'UInt8'
        filteredArray += money

 

發現原來是 += 符號不能用于 append ,只能用于 combine ,在外面包個 [] 即可:

 

復制代碼 代碼如下:

var oldArray = [10,20,45,32]
var filteredArray : Array<Int> = []
for money in oldArray {
    if (money > 30) {
        filteredArray += [money]
    }
}
println(filteredArray) // [45, 32]

 

(靠。。居然忘了貼 filter 的用法,寫到后面才發現。。)

用 filter 可以這樣實現:

 

復制代碼 代碼如下:

var oldArray = [10,20,45,32]
var filteredArray  = oldArray.filter({
    return $0 > 30
})
println(filteredArray) // [45, 32]

 

你真的好短啊!

reduce

reduce 函數解決了把數組中的值整合到某個獨立對象的問題。定義如下:

 

復制代碼 代碼如下:

func reduce<U>(initial: U, combine: (U, T) -> U) -> U

 

好吧看起來略抽象。我們還是從 for in 開始。比如我們要把數組中的值都加起來放到 sum 里,那么傳統做法是:

 

復制代碼 代碼如下:

var oldArray = [10,20,45,32]
var sum = 0
for money in oldArray {
    sum = sum + money
}
println(sum) // 107

 

reduce 有兩個參數,一個是初始化的值,另一個是一個閉包,閉包有兩個輸入的參數,一個是原始值,一個是新進來的值,返回的新值也就是下一輪循環中的舊值。寫幾個小例子試一下:

 

復制代碼 代碼如下:

var oldArray = [10,20,45,32]
var sum = 0
sum = oldArray.reduce(0,{$0 + $1}) // 0+10+20+45+32 = 107
sum = oldArray.reduce(1,{$0 + $1}) // 1+10+20+45+32 = 108
sum = oldArray.reduce(5,{$0 * $1}) // 5*10*20*45*32 = 1440000
sum = oldArray.reduce(0,+) // 0+10+20+45+32 = 107
println(sum)

 

大概就是這些。

map 用來解包可選類型

我們在解包可選類型的時候,通常會這么做:

 

復制代碼 代碼如下:

func increment(someNumber: Int?) -> Int? {
    if let number = someNumber {
        return number + 1
    } else {
        return nil
    }
}
increment(5)   // Some 6
increment(nil) // nil

 

我們也可以用 map 來實現:

 

復制代碼 代碼如下:


func increment(someNumber: Int?) -> Int? {
    return someNumber.map { number in number + 1 }
}

 

increment(5)   // Some 6
increment(nil) // nil

 

包括其他可選類型也是可行的,比如 String :

 

復制代碼 代碼如下:

func hello(someName: String?) -> String? {
    return someName.map { name in "Hello, \(name)"}
}
hello("NatashaTheRobot") // Some "Hello, NatashaTheRobot"
hello(nil) // nil

 

再搭配上 ?? 符號,嗯基本夠用了:

 

復制代碼 代碼如下:


func hello(someName: String?) -> String {
    return someName.map { name in "Hello, \(name)" } ?? "Hello world!"
}

 

hello("NatashaTheRobot") // "Hello, NatashaTheRobot"
hello(nil)               // "Hello world!"

 

擴展

數組和字典十分常用,而官方的方法功能有限。我們可以學習ExSwift 中 Array.swift 的內容,給 Array 添加一些 Extension。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

延伸 · 閱讀

精彩推薦
  • SwiftSwift使用CollectionView實現廣告欄滑動效果

    Swift使用CollectionView實現廣告欄滑動效果

    這篇文章主要為大家詳細介紹了Swift使用CollectionView實現廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Stevin的技術博客12372021-01-13
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。...

    Swift教程網4412020-12-16
  • SwiftSwift實現多個TableView側滑與切換效果

    Swift實現多個TableView側滑與切換效果

    這篇文章主要為大家詳細介紹了Swift實現多個TableView側滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift的74個常用內置函數介紹

    Swift的74個常用內置函數介紹

    這篇文章主要介紹了Swift的74個常用內置函數介紹,這篇文章列舉出了所有的Swift庫函數,內置函數是指無需引入任何模塊即可以直接使用的函數,需要的朋友可...

    Swift教程網5802020-12-19
  • Swiftswift where與匹配模式的實例詳解

    swift where與匹配模式的實例詳解

    這篇文章主要介紹了swift where與匹配模式的實例詳解的相關資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術師14382021-01-06
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環境時,出現了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網2232020-12-16
  • SwiftSwift教程之基礎數據類型詳解

    Swift教程之基礎數據類型詳解

    這篇文章主要介紹了Swift教程之基礎數據類型詳解,本文詳細講解了Swift中的基本數據類型和基本語法,例如常量和變量、注釋、分號、整數、數值類型轉換等...

    Swift教程網5162020-12-18
  • SwiftSwift中轉義閉包示例詳解

    Swift中轉義閉包示例詳解

    在Swift 中的閉包類似于結構塊,并可以在任何地方調用,下面這篇文章主要給大家介紹了關于Swift中轉義閉包的相關資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: jizzz日本 | 欧美日韩视频在线观看免费 | 成人不卡在线观看 | 国产高清自拍视频 | 久久精品国产一区 | 精品一二三区 | 精品久久久久久久久久久久 | 日本一区二区三区在线视频 | 激情综合在线观看 | 国产a区| 国产黄色av | 91精品国产综合久久婷婷香蕉 | 成人免费视频网站在线观看 | 国产a在亚洲线播放 | 亚洲精品一区二区三区在线 | 日韩视频不卡 | 6080yy午夜一二三区久久 | 美女一区二区三区 | 在线午夜 | 久久久久久久av | 国产在线一二三区 | 干干人人 | 精品久久久久久 | 久久精国产 | 久久中文字幕一区 | 国产精品久久久久久久久久久久久 | 亚洲五码中文字幕 | 狠狠躁夜夜躁人人爽天天高潮 | 最新免费av网站 | 成人国产精品免费观看 | 日韩一二区视频 | 懂色av中文字幕一区二区三区 | 久久影院久久 | 国产中文字幕一区 | 精品久久久久久久中文字幕 | 羞羞视频在线看 | 亚洲综合在线视频 | 欧美成人影院 | 一级毛片免费观看 | 日本精品久久 | 国产综合精品一区二区三区 |