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

Swift教程之下標詳解

 更新時間:2015年01月12日 14:47:19   投稿:junjie  
這篇文章主要介紹了Swift教程之下標詳解,本文講解了下標語法、下標的使用、下標選項等內(nèi)容,需要的朋友可以參考下

類,結(jié)構和枚舉類型都可以通過定義下標來訪問一組或者一個序列中的成員元素。通過下標索引就可以方便地檢索和設置相應的值,而不需要其他的額外操作。比如你可以通過someArray[index]來訪問數(shù)組中的元素,或者someDictionary[key]來對字典進行索引。

你可以為一個類型定義多個下標,以及適當?shù)南聵酥剌d用來根據(jù)傳遞給下標的索引來設置相應的值。下標不僅可以定義為一維的,還可以根據(jù)需要定義為多維的,多個參數(shù)的。

1、下標語法

下標可以讓你通過實例名后加中括號內(nèi)一個或多個數(shù)值的形式檢索一個元素。語法和方法語法和屬性語法類似,通過使用subscript關鍵定義,一個或多個輸入?yún)?shù)以及一個返回值。不同于實例方法的是,下標可以是可讀寫的或者只讀的。這種行為通過一個getter和setter語句聯(lián)通,就像是計算屬性一樣。

復制代碼 代碼如下:
 
subscript(index: Int) -> Int {
    get {
        // return an appropriate subscript value here
    }
    set(newValue) {
        // perform a suitable setting action here
    }
}

newValue的類型和下標返回的類型一樣。和計算屬性一樣,你可以選擇不指定setter的參數(shù),因為當你不指定的時候,默認參數(shù)newValue會被提供給setter。

和計算屬性一樣,只讀下標可以不需要get關鍵詞:

復制代碼 代碼如下:
 
subscript(index: Int) -> Int {
    // return an appropriate subscript value here
}

下面是一個只讀下標的實現(xiàn),定義了一個TimesTable結(jié)構來表示一個整數(shù)的倍數(shù)表:

復制代碼 代碼如下:

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
println("six times three is \(threeTimesTable[6])")
// prints "six times three is 18"

在這個例子中,實例TimesTable被創(chuàng)建為3倍數(shù)表,這是通過在初始化的時候為multiplier參數(shù)傳入的數(shù)值3設置的。

注意:

倍數(shù)表是根據(jù)特定的數(shù)學規(guī)則設置的,所以不應該為threeTimeTable[someIndex]元素設置一個新值,所以TimesTable的下標定義為只讀。

2、下標的使用

下標的具體含義由使用它時的上下文來確定。下標主要用來作為集合,列表和序列的元素快捷方式。你可以自由的為你的類或者結(jié)構定義你所需要的下標。

比如說,Swift中字典類型實現(xiàn)的下標是設置和檢索字典實例中的值??梢酝ㄟ^分別給出下標中的關鍵詞和值來設置多個值,也可以通過下標來設置單個字典的值:

復制代碼 代碼如下:
 
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2

上面的例子中定義了一個變量numberOfLegs,然后通過鍵值對初始化。numberOfLegs的類型是字典類型Dictionary<String, Int>。在字典創(chuàng)建之后,例子使用了下標賦值方法添加了一個類型為字符串的鍵”bird”和Int值2到字典中。

更多關于字典的下標可以參考:訪問和修改字典這一章節(jié)

注意:

Swift中字典類型實現(xiàn)的鍵值對下標是可選類型。對于numberOfLges字典來說,返回的值是Int?,也就是可選Int值。字典的這種使用可選類型下標的方式說明不是所有的鍵都有對應的值。同樣也可以通過給鍵賦值nil來刪除這個鍵。

3、下標選項

下標可以接收任意數(shù)量的參數(shù),參數(shù)的類型也可以各異。下標還可以返回任何類型的值。下標可以使用變量參數(shù)或者可變參數(shù),但是不能夠使用輸入輸出參數(shù)或者提供默認參數(shù)的值。

類或者結(jié)構可以根據(jù)需要實現(xiàn)各種下標方式,可以在需要的時候使用合適的下標通過中括號中的參數(shù)返回需要的值。這種多下標的定義被稱作下標重載。

當然,最常見的下標用法是單個參數(shù),也可以定義多個參數(shù)的下標。下面的例子演示了一個矩陣Matrix結(jié)構,它含有二維的Double值。矩陣結(jié)構的下標包括兩個整形參數(shù):

復制代碼 代碼如下:

struct Matrix {
    let rows: Int, columns: Int
    var grid: Double[]
    init(rows: Int, columns: Int) {
        self.rows = rows
        self.columns = columns
        grid = Array(count: rows * columns, repeatedValue: 0.0)
    }
    func indexIsValidForRow(row: Int, column: Int) -> Bool {
        return row >= 0 && row < rows && column >= 0 && column < columns
    }
    subscript(row: Int, column: Int) -> Double {
        get {
            assert(indexIsValidForRow(row, column: column), "Index out of range")
            return grid[(row * columns) + column]
        }
        set {
            assert(indexIsValidForRow(row, column: column), "Index out of range")
            grid[(row * columns) + column] = newValue
        }
    }
}

矩陣Matrix提供了一個初始化方法,使用兩個參數(shù)rows和columns,然后建立了一個數(shù)組來存儲類型為Double的值rows*columns。每個矩陣中的位置都被設置了一個初始值0.0。通過傳遞初始值0.0和數(shù)組長度給數(shù)組初始化方法完成上述操作。數(shù)組的初始化方法在:創(chuàng)建和初始化數(shù)組中有更詳細的敘述。

你可以傳遞兩個參數(shù)row和column來完成Matrix的初始化:

復制代碼 代碼如下:

var matrix = Matrix(rows: 2, columns: 2)

上面的初始化操作創(chuàng)建了一個兩行兩列的矩陣Matrix實例。這個矩陣實例的grid數(shù)組看起來是平坦的,但是實際上是矩陣從左上到右下的一維存儲形式。

矩陣中的值可以通過使用包含row和column以及逗號的下標來設置:

復制代碼 代碼如下:

matrix[0, 1] = 1.5
matrix[1, 0] = 3.2

這兩個語句調(diào)用了下標的setter方法為右上和左下角的兩個元素分別賦值1.5和3.2

矩陣下標的getter和setter方法都包括了一個斷言語句來檢查下標row和column是否有效。通過indexIsValid方法來判斷row和column是否在矩陣的范圍內(nèi):

復制代碼 代碼如下:
 
func indexIsValidForRow(row: Int, column: Int) -> Bool {
    return row >= 0 && row < rows && column >= 0 && column < columns
}

如果訪問的矩陣越界的時候,斷言就會被觸發(fā):

復制代碼 代碼如下:
 
let someValue = matrix[2, 2]
// this triggers an assert, because [2, 2] is outside of the matrix bounds

相關文章

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

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

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

    swift中可選值?和!使用的方法示例

    這篇文章主要給大家介紹了關于swift中可選值?和!使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • 如何快速用上Swift靜態(tài)庫詳解

    如何快速用上Swift靜態(tài)庫詳解

    這篇文章主要給大家介紹了關于如何快速用上Swift靜態(tài)庫的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • Swift中非可選的可選值類型處理方法詳解

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

    Optional是Objective-C沒有的數(shù)據(jù)類型,是蘋果引入到Swift語言中的全新類型,它的特點就和它的名字一樣:可以有值,也可以沒有值,當它沒有值時,就是nil。下面這篇文章主要給大家介紹了關于Swift中非可選的可選值類型處理方法的相關資料,需要的朋友可以參考下。
    2017-11-11
  • Swift利用指紋識別或面部識別為應用添加私密保護功能

    Swift利用指紋識別或面部識別為應用添加私密保護功能

    這篇文章主要給大家介紹了關于Swift利用指紋識別或面部識別為應用添加私密保護功能的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用swift具有一定的參考學習價值,需要的朋友下面隨著小編來一起看看吧
    2018-05-05
  • openstack重啟swift服務后報錯問題解決方案

    openstack重啟swift服務后報錯問題解決方案

    這篇文章主要介紹了解決openstack重啟swift服務后報錯,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Swift開發(fā)之使用UIRefreshControl實現(xiàn)下拉刷新數(shù)據(jù)及uirefreshcontrol使用

    Swift開發(fā)之使用UIRefreshControl實現(xiàn)下拉刷新數(shù)據(jù)及uirefreshcontrol使用

    本文給大家介紹使用UIRefreshControl實現(xiàn)下拉刷新數(shù)據(jù),及UIRefreshControl的使用步驟,對本文感興趣的朋友一起學習吧
    2015-11-11
  • 詳解Swift編程中的方法與屬性的概念

    詳解Swift編程中的方法與屬性的概念

    這篇文章主要介紹了Swift編程中的方法與屬性的概念,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • 淺析Swift中struct與class的區(qū)別(匯編角度底層分析)

    淺析Swift中struct與class的區(qū)別(匯編角度底層分析)

    這篇文章主要介紹了Swift中struct與class的區(qū)別 ,本文從匯編角度分析struct與class的區(qū)別,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Swift開發(fā)之UITableView狀態(tài)切換效果

    Swift開發(fā)之UITableView狀態(tài)切換效果

    這篇文章主要介紹了Swift開發(fā)之UITableView狀態(tài)切換效果的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08

最新評論

盐山县| 石狮市| 洱源县| 迁安市| 靖州| 呼伦贝尔市| 昭平县| 思南县| 北票市| 临桂县| 正蓝旗| 隆尧县| 牡丹江市| 松阳县| 海兴县| 紫阳县| 多伦县| 宁晋县| 宣汉县| 株洲市| 南宁市| 新源县| 福州市| 琼中| 新闻| 咸丰县| 宜丰县| 铁岭县| 聂拉木县| 临潭县| 雅江县| 宁武县| 犍为县| 德州市| 衢州市| 开远市| 丹凤县| 本溪| 隆子县| 仙游县| 平舆县|