swift3 下标subscript

前端之家收集整理的这篇文章主要介绍了swift3 下标subscript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

下标是方法的一种,是访问集合、列表或者序列中的元素的快捷方式。

定义形式:一个名为subscript的计算属性;可以忽略set(只读)
用法实例名[索引]
作用:可以访问或设置其中元素。

1.常见的用法:字典、数组等

  1. var 数组1 = [1,2,3,55,6,-9,0]
  2. 数组1[3] //55
  3.  
  4. let 字典1 = ["a":1,"b": 2,"c":3]
  5. 字典1["b"] //2

2.通过下标简化调用方法调用

  1. //pow(x,y) //其作用是计算x的y次方
  2. struct {
  3. //一般方法
  4. func 面积(半径:Double) ->Double {
  5. return M_PI * pow(半径,2)
  6. }
  7. //使用下标subscript简化调用方法
  8. subscript(半径:Double) ->Double {
  9. return M_PI * pow(半径,2)
  10. }
  11. }
  12.  
  13. let 1 = 圆()
  14. 1.面积(半径: 3.3) //34.21194399759284
  15. //使用下标
  16. 1[3.3] //34.21194399759284

3.多维下标

get:用于获取属性的值
set:用于设置属性的值
assert(a,b) //第一个参数为判断条件(BOOL),第二个参数为条件”不满足”时的打印信息(String)。

3.1 下标可读可写

  1. struct Matrix {
  2. var rows,cols : Int
  3. var grid: [Int]
  4.  
  5. init(rows: Int,cols: Int) {
  6. self.cols = cols
  7. self.rows = rows
  8.  
  9. grid = Array(repeating: 0,count: rows * cols)
  10. }
  11.  
  12. func indexIsValid(row:Int,col:Int) -> Bool {
  13. return row >= 0 && row < rows && col >= 0 && col < cols
  14. }
  15.  
  16. subscript(row:Int,col:Int) ->Int {
  17. get {
  18. assert(indexIsValid(row: row,col: col),"数组索引越界")
  19. return grid[col + (row * cols)]
  20. }
  21. set {
  22. assert(indexIsValid(row: row,"数组索引越界")
  23.  
  24. grid[col + (row * cols)] = newValue
  25. }
  26. }
  27. }
  28. //写
  29. var matrix1 = Matrix(rows: 3,cols: 3)
  30. matrix1[0,0] = 7
  31. matrix1[0,1] = 5
  32. matrix1[0,2] = -9
  33. matrix1[1,0] = 8
  34. matrix1[1,1] = 9
  35. matrix1[1,2] = 99
  36. matrix1[2,0] = -8
  37. matrix1[2,1] = -9
  38. matrix1[2,2] = -99
  39.  
  40. matrix1.grid //[7,5,-9,8,9,99,-8,-99]
  41. //读
  42. matrix1[2,2] //-99

3.2 下标只读

  1. class SectionAndRow {
  2. var array:Array<Array<Int>> = [ [1,2],[3,4],[5,6],[7,8]
  3. ]
  4.  
  5. subscript(section:Int,row:Int)->Int{
  6.  
  7. //忽略get块创建只写属性,忽略set块创建只读属性
  8. get{
  9. print(array.count)
  10. print(array[section].count)
  11. assert(section >= 0 && section < array.count && row >= 0 && row < array[section].count,"数组索引越界")
  12. let temp = array[section]
  13. return temp[row]
  14. }
  15. }
  16. }
  17. var data = SectionAndRow()
  18. //通过二维下标取值
  19. data[3,1] //8

参考自SwiftV课堂视频源码

猜你在找的Swift相关文章