下标(subscript)

1、使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为:小标脚本

subscript的语法类似于实例方法、计算属性,本质就是方法(函数)

2、subscript中定义的返回值类型决定了,get方法的返回值类型,set方法中newValue的类型。

class Point {var x = 0.0, y = 0.0subscript(index: Int) -> Double {set {if index == 0 {x = newValue} else if index == 1 {y = newValue}}get {if index == 0 {return x} else if index == 1 {return y}return 0}}
}var p = Point()
p[0] = 11.1
p[1] = 22.2
print(p.x)
print(p.y)
print(p[0])
print(p[1])

3、subscript可以接受多个参数,并且类型任意。

4、subscript可以没有set方法,但必须要有get方法。

如果只有get方法,可以省略get

class Point {var x = 0.0, y = 0.0subscript(index: Int) -> Double {if index == 0 {return x} else if index == 1 {return y}return 0}
}

5、可以设置参数标签

class Point {var x = 0.0, y = 0.0subscript(index i: Int) -> Double {if i == 0 {return x} else if i == 1 {return y}return 0}
}var p = Point()
p.y = 22.2
print(p[index: 1]) //22.2

6、下标可以是类型方法

class Sum {static subscript(v1: Int, v2: Int) -> Int {return v1 + v2}
}print(Sum[10, 20]) //30

7、本质是调用里面的set和get方法

8、结构体、类作为返回值对比

class Point {var x = 10, y = 10
}class PointManager {var point = Point()subscript(index: Int) -> Point {
//        set {
//            point = newValue
//        }get {return point}}
}var pm = PointManager()
pm[0].x = 11
pm[0].y = 22

Point如果是类的话,可以不用写set方法,Point如果是结构体的话必须要写set方法。

9、接收多个参数的下标

class Grid {var data = [[0, 1, 2],[3, 4, 5],[6, 7, 8]]subscript(row: Int, column: Int) -> Int {set {guard row >= 0 && row < 3 && column >= 0 && column < 3 else {return}data[row][column] = newValue}get {guard row >= 0 && row < 3 && column >= 0 && column < 3 else {return 0}return data[row][column]}}
}var grid = Grid()
grid[0, 1] = 77
grid[1, 2] = 88
grid[2, 0] = 99
print(grid.data)

Swift中的下标(subscript)相关推荐

  1. Swift Tips - 在 Swift 中自定义下标访问

    Untitled Document.md 在 Swift 中,我们可以使用下标轻松的访问数组中的元素.比如这样: var numbers:Array = [1,2,3,4,5] println(num ...

  2. Swift 中 String 取下标及性能问题

    取下标 String String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 String 中获取 let greeting ...

  3. Swift中的subscript

    Swift中通过subscript来定义角标 其中 类.结构体和枚举都可以定义subscripts, 就像数组一样使用一个实例 如下面的代码例子 struct TimesTable { let mul ...

  4. iOS开发笔记之九十四——Swift中的可选类型Optional

    一.Optional类型的概念 Swift中为何要引入Optional的概念,官方文档中有介绍: Swift also introduces optional types, which handle ...

  5. Swift 中的关键字详解

    转载自:https://www.cnblogs.com/liYongJun0526/p/7522130.html 要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在S ...

  6. [译] Swift 中的动态特性

    原文地址:Dynamic Features in Swift 原文作者:Mike Finney 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:iWesli ...

  7. Swift中关于元组的某些特性

    2019独角兽企业重金招聘Python工程师标准>>> 元组(tuples)是swift中一个特有的数据类型.它可以复合一系列不同类型的值.通常在函数的返回值中使用. 这是一个元组: ...

  8. Swift 中枚举、结构体、类(enum、struct、class)

    Swift 中枚举.结构体.类(enum.struct.class) Swift中的枚举与OC相比不会自动分配初始值,值的类型不会限定为整数,可以给定关联值类型和具体值(整型.浮点型.字符型(Swif ...

  9. Swift中Class和Struct异同

    Swift 中类和结构体有很多共同点.共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的 ...

  10. Swift 中的类和结构体

    Swift 中的结构体的能力被大大加强,不仅可以拥有属性,还以有方法.构造函数.甚至是扩展和遵守协议.这样的结构体和类有很多相同点: 属性:存储数据 方法:提供一些功能 下标:可以使用下标语法 构造器 ...

最新文章

  1. java奇怪的问题_一个奇怪的Java集合问题
  2. QImage与OpenCV中的MAT图像格式转换
  3. SpringBoot中使用AOP打印接口日志的方法(转载)
  4. C/C++笔试题目大全
  5. 13个代码注释的小技巧
  6. c++中计算2得n次方_七上,一元一次方程,知识点综合学霸笔记在手
  7. C++ new和delete运算符
  8. 淘宝的生态灾难,谁来救赎?
  9. Unable to get the focused window from device - android
  10. amd为什么还用针脚_AMD千年老二的位置能改变吗?
  11. 满足ThreadLocal目的
  12. Node.js 借助art-template进行后端渲染并呈现页面到前端
  13. Java基础:MySQL
  14. 基于云计算的数字化业务系统安全工程
  15. 物理防火墙是什么?有什么作用?
  16. python绘制人物关系图_文本分析之制作网络关系图——Python
  17. 如何登录虚拟主机服务器,如何登录虚拟主机服务器
  18. MyBatis学习(二)--利用MyBatis实现CRUD操作
  19. 数据库与MPP数仓(十九):高效SQL
  20. windows 常用快捷键(常用)

热门文章

  1. 点击计算机管理出现找不到文件,win10点击计算机管理时提示找不到文件如何办?...
  2. Android MTU 值修改
  3. 第三章 Unity基础之API
  4. Gris游戏开发-day03
  5. WRF users guide Chap5
  6. 从0开始学大数据(一)
  7. ThinkPHP5分页样式
  8. 【深度学习基础】Epoch, Batch, Iteration这三个概念的区别与联系
  9. 第十四篇、贪吃蛇小游戏的制作
  10. 程序员的爱情最纯洁?