Swift2.0語言教程之下標指令碼
Swift2.0語言教程之下標指令碼
下標指令碼
下標指令碼是訪問物件、集合或者序列的快速方式。開發者不需要呼叫例項特定的賦值和訪問方法,就可以直接訪問所需要的數值。例如在陣列中,可以直接使用下標去訪問或者修改陣列中的某一個元素。程式碼如下:
- import Foundation
- var array=["One","Two","Three","Four","Five"]
- print("訪問元素:\(array[2])")
- array[2]="Third"
- print("訪問修改後的元素:\(array[2])")
執行結果如下:
- 訪問元素:Three
- 訪問修改後的元素:Third
在Swift中,下標指令碼也可以定義在類中。這樣,開發者就可以像陣列一樣,快速訪問類中的屬性。本節將主要講解類中如何使用下標指令碼。
定義下標指令碼
下標指令碼透過subscript關鍵字進行定義,其定義形式如下:
- subscript(引數名稱1:資料型別,引數名稱2:資料型別,…) ->返回值的資料型別 {
- get {
- // 返回與引數型別匹配的型別的值
- }
- set(引數名稱) {
- // 執行賦值操作
- }
- }
注意:set引數名稱必須和下標指令碼定義的返回值型別相同,所以不為它指定資料型別。與計算屬性相同,set後面如果沒有宣告引數,那麼就使用預設的newValue。
【示例8-18】以下將在類中定義一個下標指令碼,實現透過下標指令碼獲取某一屬性的值。程式碼如下:
- class NewClass{
- var english:Int=0
- var chinese:Int=0
- var math:Int=0
- //定義下標指令碼
- subscript(index:Int)->Int{
- get{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- set{
- english=newValue
- chinese=newValue
- math=newValue
- }
- }
- }
呼叫下標指令碼
定義下標指令碼後,就可以進行呼叫了,其呼叫形式如下:
- 例項物件[引數1,引數2,…]
其中,[]和它裡面的內容就代表了在類中定義的下標指令碼。
使用下標指令碼
下標指令碼可以根據傳入引數的不同,分為具有一個入參引數的下標指令碼和具有多個入參引數的下標指令碼。以下就是對這兩個下標指令碼在類中的使用。
1.具有一個傳入引數的下標指令碼
具有一個入參引數的下標指令碼是最常見的。在集合以及字串中使用的下標就是具有一個傳入引數的下標指令碼。
【示例8-19】以下程式透過使用下標指令碼計算3門成績的和。程式碼如下:
- import Foundation
- class Score{
- var english:Int=0
- var chinese:Int=0
- var math:Int=0
- //定義下標指令碼
- subscript(index:Int)->Int{
- get{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- set{
- english=newValue
- chinese=newValue
- math=newValue
- }
- }
- }
- var myscore=Score()
- var sum:Int=0
- var i:Int=0
- //遍歷
- for i=0;i<3;++i{
- sum+=myscore[i]
- }
- print(sum)
- //修改屬性值
- myscore[0]=100
- myscore[1]=90
- myscore[2]=80
- //遍歷求和
- for i=0;i<3;++i{
- sum+=myscore[i]
- }
- print(sum)
執行結果如下所示:
- 0
- 240
注意:下標指令碼可以和計算屬性一樣設定為讀寫或只讀。以上的程式碼是讀寫的形式。只讀的一般語法形式如下:
- subscript(引數名稱:資料型別) -> Int {
- get{
- //返回與引數匹配的Int型別的值
- }
- }
- 可以簡寫為以下的形式:
- subscript(引數名稱:資料型別) -> Int {
- // 返回與引數匹配的Int型別的值
- }
【示例8-20】以下就使用只讀的形式實現使用下標訪問屬性值的功能。程式碼如下:
- import Foundation
- class Score{
- var english:Int=50
- var chinese:Int=100
- var math:Int=30
- //定義下標指令碼
- subscript(index:Int)->Int{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- }
- var myscore=Score()
- var sum:Int=0
- var i:Int=0
- //遍歷輸出屬性值
- for i=0;i<3;++i{
- print(myscore[i])
- }
執行結果如下所示:
- 50
- 100
- 30
2.具有多個引數的下標指令碼
具有一個入參引數的下標指令碼一般使用在多維維陣列中。以下就是使用具有兩個引數的下標為二維陣列賦值。程式碼如下:
- import Foundation
- var value:Int=0
- class NewClass{
- var rows: Int = 0, columns: Int=0
- 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
- }
- }
- }
- var matrix = NewClass(rows: 2, columns: 2)
- print("沒有賦值前")
- print(matrix[0,0])
- print(matrix[0,1])
- print(matrix[1,0])
- print(matrix[1,1])
- print("賦值後")
- matrix[0,0]=1.0
- matrix[0,1]=5.6
- matrix[1,0]=2.4
- matrix[1,1]=3.2
- print(matrix[0,0])
- print(matrix[0,1])
- print(matrix[1,0])
- print(matrix[1,1])
執行結果如下所示:
- 沒有賦值前
- 0.0
- 0.0
- 0.0
- 0.0
賦值後
- 1.0
- 5.6
- 2.4
- 3.2
當然,下標指令碼除了可以對訪問物件以及物件中的屬性外,還可以實現一些自定義的功能,如以下的程式碼,此程式碼實現的功能是計算下標值和10的乘積。程式碼如下:
- import Foundation
- class NewClass{
- var count1: Int=10
- //定義下標指令碼
- subscript(index:Int) -> Int {
- get {
- var count=index*count1
- return count
- }
- set(newvalue){
- //執行賦值操作
- count1=newvalue
- }
- }
- }
- let newClass=NewClass()
- print(newClass.count1)
- print(newClass[6])
執行結果如下:
- 10
- 60
本文選自:Swift2.0語言快速入門v3.0 大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1744064/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Swift2.0語言教程之Swift2.0語言中的標準函式Swift函式
- Swift2.0語言教程之閉包Swift
- linux shell 指令碼語言教程(超詳細!)Linux指令碼
- Swift2.0語言教程之函式的返回值與函式型別Swift函式型別
- Rust語言教程Rust
- YAML 語言教程YAML
- datastage指令碼排程AST指令碼
- Swift3.0語言教程使用指標建立和初始化字串Swift指標字串
- html指令碼 標籤與HTML指令碼
- Swift 下標指令碼(Subscripts)Swift指令碼
- Shell 指令碼語句指令碼
- 【指令碼】shell語法指令碼
- C語言教程——03 C語言結構C語言
- 批次過程獲取指令碼指令碼
- crontab排程Python指令碼Python指令碼
- 學校C語言教材的缺陷C語言
- C 語言教程:條件和 if...else 語句
- Swift3.0語言教程使用Unicode正規化標準化獲取字串SwiftUnicode字串
- Swift3.0語言教程刪除字元與處理字元編碼Swift字元
- Swift3.0語言教程使用編碼建立和初始化字串Swift字串
- Swift3.0語言教程獲取字串編碼與雜湊地址Swift字串編碼
- 單個過程獲取指令碼指令碼
- Xamarin XAML語言教程基礎語法篇大學霸
- Django 多語言教程 (i18n)Django
- 小白學習Golang(一)Go語言教程Golang
- Swift3.0語言教程使用URL字串Swift字串
- Swift3.0語言教程組合字串Swift字串
- Xamarin XAML語言教程模板頁面TemplatedPage
- 21世紀C語言教程-前言 (轉)C語言
- 21實際c語言教程-1 (轉)C語言
- 21實際C語言教程-2 (轉)C語言
- 21實際C語言教程-3 (轉)C語言
- 導庫標準引數指令碼指令碼
- javascript是指令碼語言嗎JavaScript指令碼
- 比特幣指令碼語言比特幣指令碼
- 指令碼語言怎麼理解指令碼
- 短影片系統原始碼——“潮流”標籤之下蘊藏哪些實用功能原始碼
- Linux Shell指令碼時間排程Linux指令碼