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

首頁 > 編程 > Swift > 正文

Swift教程之下標詳解

2020-03-09 17:51:01
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Swift教程之下標詳解,本文講解了下標語法、下標的使用、下標選項等內容,需要的朋友可以參考下
 

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

你可以為一個類型定義多個下標,以及適當的下標重載用來根據傳遞給下標的索引來設置相應的值。下標不僅可以定義為一維的,還可以根據需要定義為多維的,多個參數的。

1、下標語法

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

 

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

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

 

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

 

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

下面是一個只讀下標的實現,定義了一個TimesTable結構來表示一個整數的倍數表:

 

 

復制代碼代碼如下:

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被創建為3倍數表,這是通過在初始化的時候為multiplier參數傳入的數值3設置的。

注意:

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

2、下標的使用

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

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

 

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

 

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

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

注意:

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

3、下標選項

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

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

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

 

復制代碼代碼如下:

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

 

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

 

復制代碼代碼如下:

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

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

 

Swift教程之下標詳解

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

 

復制代碼代碼如下:

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

 

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

Swift教程之下標詳解

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

 

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

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

 

 

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久免费精品视频| 日本精品va在线观看| 欧美高清在线视频观看不卡| 91免费综合在线| 在线精品高清中文字幕| 国产亚洲激情视频在线| 欧美亚洲伦理www| 欧美色视频日本版| 俺去啦;欧美日韩| 欧美富婆性猛交| 久久久99免费视频| 欧美性猛交99久久久久99按摩| 成人妇女免费播放久久久| 欧美日韩aaaa| 欧美成人黑人xx视频免费观看| 亚洲精品美女在线观看播放| 欧美性感美女h网站在线观看免费| 91在线|亚洲| 91色在线视频| 性欧美在线看片a免费观看| 日韩电影中文字幕一区| 欧美精品少妇videofree| 国产一区深夜福利| 正在播放国产一区| 岛国av午夜精品| 亚洲激情视频网| 国产免费久久av| 国产精品久久久| 成人av在线亚洲| 97在线视频免费播放| 国产精品免费视频xxxx| 国产成人综合一区二区三区| 欧美色道久久88综合亚洲精品| 国产成人综合亚洲| 国产成人a亚洲精品| 日韩av观看网址| 亚洲精品成人免费| 久久久这里只有精品视频| 海角国产乱辈乱精品视频| 欧美肥臀大乳一区二区免费视频| 日韩女优人人人人射在线视频| 精品亚洲aⅴ在线观看| 国产精品免费久久久久影院| 在线国产精品视频| 中文字幕v亚洲ⅴv天堂| 国产日本欧美在线观看| 91亚洲国产成人久久精品网站| 久久综合国产精品台湾中文娱乐网| 亚洲自拍偷拍福利| 久久久久久中文| 亚洲伊人久久大香线蕉av| 亚洲人a成www在线影院| 97视频在线观看网址| 欧美日韩国产成人高清视频| 欧美精品手机在线| 国产精品嫩草视频| 8090成年在线看片午夜| 国产精品流白浆视频| 亚洲综合中文字幕在线| 亚洲午夜久久久久久久| 成人欧美一区二区三区在线| 欧美日韩亚洲91| 国产精品久久久久久久久久久久| 久久精品久久久久| 91亚洲国产精品| 久久久久久亚洲精品不卡| 国产成人综合精品在线| 国产69精品99久久久久久宅男| 欧美电影在线观看| 成人免费在线视频网站| 精品无人区乱码1区2区3区在线| 国产欧亚日韩视频| 国产精品亚洲美女av网站| 成人免费观看网址| 综合av色偷偷网| 亚洲视频精品在线| 91影视免费在线观看| 亚洲高清不卡av| 亚洲精品999| 精品少妇一区二区30p| 欧美性受xxx| 亚洲综合大片69999| 亚洲人成网站色ww在线| 亚洲午夜未满十八勿入免费观看全集| 亚洲欧美中文日韩v在线观看| 国语自产精品视频在免费| 精品国内亚洲在观看18黄| 国产亚洲精品美女久久久| 欧美贵妇videos办公室| 国产成人短视频| 欧美精品videosex性欧美| 欧美性理论片在线观看片免费| 国产日本欧美一区二区三区| 精品性高朝久久久久久久| 欧美激情一区二区三区高清视频| 久久这里有精品| 日韩国产在线看| 欧美激情在线观看视频| 亚洲欧美精品一区| 国产成人精品免费久久久久| 色天天综合狠狠色| 国产午夜精品美女视频明星a级| 欧美日韩人人澡狠狠躁视频| 日韩精品久久久久久久玫瑰园| 亚洲大胆美女视频| 国产免费一区二区三区香蕉精| 日韩a**站在线观看| 在线观看亚洲区| 国产精品久久视频| 日韩va亚洲va欧洲va国产| 成人激情视频在线播放| 欧美贵妇videos办公室| 午夜精品视频在线| 青青草原成人在线视频| 亚洲国产精品va在线观看黑人| 日韩av不卡在线| 77777亚洲午夜久久多人| 欧美高清视频免费观看| 成人久久久久爱| 福利二区91精品bt7086| 黑人巨大精品欧美一区免费视频| 午夜精品久久17c| 91视频九色网站| 亚洲第一精品久久忘忧草社区| 亚洲日本成人女熟在线观看| 欧美视频精品一区| 久久久亚洲欧洲日产国码aⅴ| 国产精品久久久久久影视| 国产精品久久久久久久久免费| 97在线视频一区| 国产精品久久一区主播| 成人精品一区二区三区电影黑人| 国产精品午夜视频| 青草青草久热精品视频在线网站| 在线丨暗呦小u女国产精品| 26uuu另类亚洲欧美日本老年| 亚洲天堂免费观看| 日韩一区二区三区xxxx| 国内精品免费午夜毛片| 精品国产91久久久| 成人网欧美在线视频| 欧美一级免费看| 成人黄色av播放免费| 亚洲美女精品久久| 亚洲国产成人av在线| 国产成人精彩在线视频九色| 亚洲国产成人精品女人久久久| 91在线观看免费观看| 亚洲一区制服诱惑| 亚洲国产精品推荐| 正在播放亚洲1区| 久久久久久久久久久免费精品| 色综合导航网站| 国产欧美精品xxxx另类| 神马久久久久久| 久久综合五月天| 97人洗澡人人免费公开视频碰碰碰| 亚洲人成电影网站色www| 色777狠狠综合秋免鲁丝| 精品久久久久久国产91| 国产97在线|日韩| 88国产精品欧美一区二区三区| 97香蕉久久夜色精品国产| 日韩大片免费观看视频播放|