类、结构体、和枚举可以定义下标。它可以作为访问集合,列表或序列成员元素的快捷方式。你可以使用下标通过索引值来设置或检索值而不需要为设置和检索分别使用实例方法。

你可以作为一个类型定义多个下标,并且下标会基于传入的索引值的类型选择合适的下标重载使用,下标没有限制单个纬度,你可以使用多个输入形参来定一下标以满足自定义类型的需求。

下标脚本允许你通过在实例名后面方括号内写一个或多值对该类的实例进行查询。它的语法类似于实例方法和计算属性,使用关键字subscript来定义下标,并且指定一个或多个输入形式参数和返回类型,与实例方法一样,与实例方法不同的是,下标可以是读写也可以是只读的

//: A UIKit based Playground for presenting user interfaceimport UIKitstruct TimesTable {let multiplier:Intsubscript(index :Int)-> Int{return multiplier * index}
}let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")

six times three is 18

下标参数

下标可以接受任意数量的输入形式参数,并且这些输入形式参数可以是任意类型。下标也可以返回任意类型,下标可以使用变量形式参数和可变形式参数,但是不能使用输入输出形式参数,或提供默认形式参数。

//: A UIKit based Playground for presenting user interfaceimport UIKitstruct Matrix{let rows:Int,columns:Intvar grid:[Double]init(rows:Int,columns:Int){self.rows=rowsself.columns=columnsgrid=Array(repeating:0, count: rows*columns)print(grid)}func indexIsValid(row:Int,column:Int) -> Bool {return row >= 0 && row < rows && column >= 0 && column < columns}subscript(row:Int,column:Int)->Double{get {assert(indexIsValid(row: row, column: column),"Index out of range")return grid[(row * columns) + column]}set {assert(indexIsValid(row: row, column: column),"Index out of range")grid[(row * column)+column] = newValue}}
}
var matrix = Matrix(rows: 2,columns: 2)
matrix[0,1]=1.5
matrix[1,0]=3.2
print(matrix)

[0.0, 0.0, 0.0, 0.0]

Matrix(rows: 2, columns: 2, grid: [3.2, 1.5, 0.0, 0.0])

类型下标

static subscript

实例下标,如果上文描述的那样,你在对应类型的实例上调用下标。你同样也可以定义类型本身的下标。这类下标叫做类型下标,

在类里则使用class 关键字,这样可以允许子类重写父类的下标实现

//: A UIKit based Playground for presenting user interfaceimport UIKitenum Planet:Int{case mercury = 1,venus,earth,mars,jupiter,strun,uranus,neptunestatic subscript(n:Int)->Planet{return Planet(rawValue: n)!}
}
let mars = Planet[4]
print(mars)

mars

swift 下标 subscript相关推荐

  1. Swift:subscript

    通常情况下.我们在使用数组(Array)或字典(Dictionary)时会使用到下标.事实上在Swift中.我们还能够给类.结构.枚举等自己定义下标(subscript). 一.基本使用 struct ...

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

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

  3. Swift字典Dictionary快速文档

    Swift Dictionary字典 简述 字典就是通过Key - Value对应关系的数据结构. swift与OC字典区别 ​ 类型: Swift字典是值类型, OC字典类型为引用类型 初始化方法 ...

  4. Swift 属性与方法

    Swift5 属性与方法 1. Swift 存储属性 // Swift5 存储属性 class Phone {var system = "iOS"// 常量存储属性,一旦实例化,不 ...

  5. 视频教程-Swift5语言入门实例教程-Swift

    Swift5语言入门实例教程 15年以上IT行业工作经验.8年以上IT行业教学经验.丰富的项目经验和授课经验,授课形式不拘一格.熟悉iOS开发,网页开发.Java开发.平面设计等技术,是一名经验丰富的 ...

  6. Swift基础入门知识学习(7)-字典-讲给你懂

    Swift基础入门知识学习(6)-数组(阵列)-讲给你懂 目录 声明字典 创建一个空字典 存取与修改字典 使用for-in遍历字典中的所有值 字典转换为数组 Swift字典(dictionary) 用 ...

  7. Swift学习笔记-005结构体和类(疯狂swift讲义第二版)

    1.定义类及类相关的一切 定义类的一般语法 [修饰符] class 类名{ //类的语句 } 定义结构体的一般语法 [修饰符] class 类名{ //结构体的语句 } 定义存储属性的一般语法 [修饰 ...

  8. Swift 系统学习 22 分析错误的三个阶段 (枚举和结构体相关)

    //: Playground - noun: a place where people can playimport UIKit/** 本节主要内容:* 1.分析错误处理的三个阶段* 2.三个阶段整合 ...

  9. 【iOS数据持久化】偏好设置(UserDefaults)

    官网文档:NSUserDufaultClass Reference 关于偏好设置:AboutPreferences and Settings UserDefualts是一种便利的,通过key-valu ...

  10. android libbfaac.so,Android中Json数据读取与创建

    一:  Json的特性和在数据交互中的地位就不用说了,直接看案例. 首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项 ...

最新文章

  1. POJ1386 Play on Words
  2. 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
  3. 使用ansible安装docker以及docker-compose
  4. python etree创建xml_利用 Python ElementTree 生成 xml的实例
  5. 枚举类型(C# 编程指南)
  6. java正则匹配英文句号_Scala 正则表达式 0411
  7. Linux内存管理(一)——从硬件角度看内存管理
  8. 【TSP】基于matlab粒子群算法Hopfield求解旅行商问题【含Matlab源码 224期】
  9. 基于SSM的房屋出租管理系统设计与实现
  10. LaTeX 页面大小和页边距
  11. 【Python函数优化】
  12. 支持向量机原理(超详细)
  13. java23种设计模式(十六) -- 中介者模式(行为设计模式)
  14. MATLAB到底有多厉害?
  15. IT售前工程师需要掌握哪些技术
  16. Python学习笔记(5),Battleship 游戏
  17. cisco路由器license的相关命令简单梳理
  18. android usb投影win10,分享win10投影到安卓平板上的方法
  19. 阿里持续投入文娱,“细火慢炖”的卡位战
  20. Unity Steam_VR VRTK开发插件自带案例详解(一)

热门文章

  1. Android 开发笔记___图像按钮__imageButton
  2. 微信小程序防止点击事件多次请求接口
  3. winedit使用教程_latex与winedit入门指导教程.pdf
  4. android:viewpager实现图片循环滑动+索引点击事件
  5. 【k8s系列5】KubernetesClientException: too old resource version 原因分析
  6. android phone 模块分析
  7. 李彦宏的搜索技术传奇
  8. 平淡人生(一)- 360发展历程及人物杂记
  9. 一天一个 Linux 命令(27):mkfs 命令
  10. 最简单荣耀手机如何不用Root激活Xposed框架