// 下标 可以定义在 类, 结构体, 和 枚举 中, 是访问集合, 列表或 序列中元素的快捷方式, 可以使用下标的索引, 设置 和 获取值, 而不需要再调用对应的存取方法, 举例来说, 用下标访问一个 Array 实例值的元素可以写作  someArray[index], 访问 dictionary 实例中的元素可以写作 someDictionary[key]

// 一个类型 可以定义多个下标, 通过不同索引类型进行重载, 下标不限于一维, 你可以定义具有多个入参的下标满足自定义类型的需求

// 下标语法

// 下标允许你通过在实例名称后面的方括号中传入一个或者多个 索引值 对实例进行存取, 语法类似于实例方法语法 和 计算型语法的混合, 与定义实例方法类似, 定义下包使用 subscript 关键字, 指定一个 或 多个输入参数和返回类型, 与实例方法不同的是, 下标可以设定为 读写 或 只读, 这种行为由 getter 和 setter 实现, 有点类似于 计算属性

struct TimesTable{

let multiplier: Int

subscript (index: Int) -> Int{

return multiplier * index

}

}

let threeTimesTable = TimesTable(multiplier:3)

print("six times three is \(threeTimesTable[6])")

// 在上栗中, 创建了一个 TimesTable 实例, 用来表示整数 3 的 乘法表, 数值 3 被传递给结构体的构造函数, 作为实例成员 multiplier 的值

// 下标用法

// 下标的确切含义取决于使用场景, 下标经常作为访问集合, 列表 或 序列中元素的快捷方式, 你可以针对自己的特定的类 或者 结构体的 功能自由的以最恰当的方式 实现下标

// 例如: Swift 的  Dictionary 类型实现 下标用于对其实力中存储的值进行存取操作, 为字典取值时, 在下标中使用 和 字典的 键 类型相同 的值, 并把一个子弟那的值类型相同的值赋给这个下标

var numberofLegs = ["spider": 8,"ant": 6, "cat": 4]

numberofLegs["bird"] = 2

// 上例定义一个名为numberOfLegs的变量,并用一个包含三对键值的字典字面量初始化它。numberOfLegs字典的类型被推断为[String: Int]。字典创建完成后,该例子通过下标将String类型的键bird和Int类型的值2添加到字典中。

// 注意 : Swift 中的 dictionary 类型的下标接受并返回可选类型的值, 上栗中的 numberOflegs 字典通过下标返回的是一个 Int? 或者是 可选的 Int,做所以如此, 是因为不是每个键都有对应的值, 同时这也提供了一种通过键删除对应值的方式, 只需要将对应的值赋值 为 nil 即可

// 下标选项

// 下标可以接受任意数量的入参, 并且这些入参可以是任意类型, 下标的返回值也可以是任意类型, 下标可以使用变量参数和可变参数, 但不能使用输入输出参数, 也不能给参数设置默认值

// 一个类 或 结构体 可以根据自身需要提供多个下标实现, 使用下标时将通过入参的数量 和 类型进行区分, 自动匹配合适的下标,  这就是下标的重载

swift 学习- 13 -- 下标的更多相关文章

  1. Swift学习目录

    本学习基于苹果官方Swift学习材料,保留了原版90%左右的内容(一些项目开发中基本不用的知识点没有整理),并根据理解进行整理.如对原版感兴趣,可以直接单击链接阅读和学习. 第一部分 基础篇 1.基本 ...

  2. Swift学习之常用UI的使用

    Swift学习之常用UI的使用 最近笔者在开始学习苹果最新的编程语言,因为笔者认为,苹果既然出了这门语言就绝对不会放弃,除非苹果倒闭了(当然这里知识一个玩笑). 所以在不久的将来,swift绝对是iO ...

  3. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  4. 今天开始Swift学习

    今天开始Swift学习  在此记录笔记  以备之后查阅! allenhuang

  5. iOS ---Swift学习与复习

    swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...

  6. JavaScript学习13 JavaScript中的继承

    JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...

  7. 12套swift学习资源分享

    虽然objective-c编程语言在过去很长一段时间都是iOS应用开发的基础语言,且很多iOS开发者对其也深爱有佳,但是随着swift编程语言的问世,迅速发展为开发者追捧的语言.且今年伴随着swift ...

  8. Swift学习笔记六

    集合类型(Collection Type) Swift提供三种主要的集合类型:数组(array).集合(set).字典(dictionary).数组是有序的值序列,集合是无序的值序列,字典是无序的键值 ...

  9. [转]swift 学习资源 大集合

    今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 ...

随机推荐

  1. Redis是可以安装成windows服务-开机自启

    其实Redis是可以安装成windows服务的,开机自启动,命令如下 redis-server --service-install redis.windows.conf 安装完之后,就可看到Redis ...

  2. webservlce 的各个属性

    [WebMethod(Description = "我是可见的", MessageName = "GetAboutIntroduction")]//有这个标志的 ...

  3. 关于"Linux下使用Windows应用程序的尝试"总结

    首推 Flatpak .Flatpak爽啊,命令行启动能不爽吗!? 其他的: 0. AppImage:AppImage试了下,唉,启动TIM时就没反应,其他的应用没试过 1. crossover:收费 ...

  4. luogu P4314 CPU监控

    传送门 这是个远古巨坑阿qwq 没有历史最大值还是能比较好做的.可能会有一个想法,就是直接维护线段树每个结点出现过的历史最大值,每次最大值变化就更新.但是有个问题:可能一个点能影响历史最大值的标记还没 ...

  5. 洛谷P1972 【[SDOI2009]HH的项链】

    这道题想了很久,发题解是为了理解的更深刻一点...(管理放我过好嘛qwq) 步入正题:这道题应该是很多做法,我选择的是离线+树状数组. 首先输入数组.用fisrt数组先记录元素最开始出现的位置,对应的 ...

  6. Java之@SuppressWarnings

    用了这个,MyEclipse里就不会报那些警告了,看起来漂亮多了 常用的:@SuppressWarnings("unchecked"),泛型@SuppressWarnings(&q ...

  7. 如何设置vmware 让别人连接你的虚拟机

    参考链接: http://blog.csdn.net/yuan1590/article/details/53504042 http://blog.csdn.net/u012110719/article ...

  8. SpringBoot多模块搭建,依赖管理

    1.创建springboot-multi-module父工程 File→New→Project 然后,Next,选择POM,其他名称自定义 Next→Finish. 说明:打开父工程的pom.xml ...

  9. sonar的安装以及使用

    SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装.配置以及使用. 1. 简介 1.  sonar是什么 Sonar是一个用于代码质 ...

  10. C++11 override 和 final 关键字

    C++11之前,一直没有继承控制关键字.禁用一个类的进一步衍生是可能的但也很棘手.为避免用户在派生类中重载一个虚函数,你不得不向后考虑. C++ 11添加了两个继承控制关键字:override和fin ...