Swift中文基础教程----下标
类,结构和枚举类型都可以通过定义下标来访问一组或者一个序列中的成员元素。通过下标索引就可以方便地检索和设置相应的值,而不需要其他的额外操作。比如你可以通过someArray[index]来访问数组中的元素,或者someDictionary[key]来对字典进行索引。
你可以为一个类型定义多个下标,以及适当的下标重载用来根据传递给下标的索引来设置相应的值。下标不仅可以定义为一维的,还可以根据需要定义为多维的,多个参数的。
1、下标语法
下标可以让你通过实例名后加中括号内一个或多个数值的形式检索一个元素。语法和方法语法和属性语法类似,通过使用subscript关键定义,一个或多个输入参数以及一个返回值。不同于实例方法的是,下标可以是可读写的或者只读的。这种行为通过一个getter和setter语句联通,就像是计算属性一样。
|
|
subscript(index:Int)->Int{
|
newValue的类型和下标返回的类型一样。和计算属性一样,你可以选择不指定setter的参数,因为当你不指定的时候,默认参数newValue会被提供给setter。
和计算属性一样,只读下标可以不需要get关键词:
subscript(index:Int)->Int{
// return an appropriate subscript value here}
下面是一个只读下标的实现,定义了一个TimesTable结构来表示一个整数的倍数表:
structTimesTable{
let multiplier:Int
subscript(index:Int)->Int{
return multiplier * index
}}
let threeTimesTable =TimesTable(multiplier:3)
println("six times three is \(threeTimesTable[6])")// prints "six times three is 18"
在这个例子中,实例TimesTable被创建为3倍数表,这是通过在初始化的时候为multiplier参数传入的数值3设置的。
注意:
倍数表是根据特定的数学规则设置的,所以不应该为threeTimeTable[someIndex]元素设置一个新值,所以TimesTable的下标定义为只读。
2、下标的使用
下标的具体含义由使用它时的上下文来确定。下标主要用来作为集合,列表和序列的元素快捷方式。你可以自由的为你的类或者结构定义你所需要的下标。
比如说,Swift中字典类型实现的下标是设置和检索字典实例中的值。可以通过分别给出下标中的关键词和值来设置多个值,也可以通过下标来设置单个字典的值:
|
|
var numberOfLegs =["spider":8,"ant":6,"cat":4]
|
上面的例子中定义了一个变量numberOfLegs,然后通过键值对初始化。numberOfLegs的类型是字典类型Dictionary<String, Int>。在字典创建之后,例子使用了下标赋值方法添加了一个类型为字符串的键”bird”和Int值2到字典中。
更多关于字典的下标可以参考:访问和修改字典这一章节
注意:
Swift中字典类型实现的键值对下标是可选类型。对于numberOfLges字典来说,返回的值是Int?,也就是可选Int值。字典的这种使用可选类型下标的方式说明不是所有的键都有对应的值。同样也可以通过给键赋值nil来删除这个键。
3、下标选项
下标可以接收任意数量的参数,参数的类型也可以各异。下标还可以返回任何类型的值。下标可以使用变量参数或者可变参数,但是不能够使用输入输出参数或者提供默认参数的值。
类或者结构可以根据需要实现各种下标方式,可以在需要的时候使用合适的下标通过中括号中的参数返回需要的值。这种多下标的定义被称作下标重载。
当然,最常见的下标用法是单个参数,也可以定义多个参数的下标。下面的例子演示了一个矩阵Matrix结构,它含有二维的Double值。矩阵结构的下标包括两个整形参数:
structMatrix{
|
矩阵Matrix提供了一个初始化方法,使用两个参数rows和columns,然后建立了一个数组来存储类型为Double的值rows*columns。每个矩阵中的位置都被设置了一个初始值0.0。通过传递初始值0.0和数组长度给数组初始化方法完成上述操作。数组的初始化方法在:创建和初始化数组中有更详细的叙述。
你可以传递两个参数row和column来完成Matrix的初始化:
|
|
var matrix =Matrix(rows:2, columns:2) |
上面的初始化操作创建了一个两行两列的矩阵Matrix实例。这个矩阵实例的grid数组看起来是平坦的,但是实际上是矩阵从左上到右下的一维存储形式。
矩阵中的值可以通过使用包含row和column以及逗号的下标来设置:
matrix[,]=1.5 matrix[,]=3.2 |
这两个语句调用了下标的setter方法为右上和左下角的两个元素分别赋值1.5和3.2
![]()
矩阵下标的getter和setter方法都包括了一个断言语句来检查下标row和column是否有效。通过indexIsValid方法来判断row和column是否在矩阵的范围内:
func indexIsValidForRow(row:Int, column:Int)->Bool{
|
如果访问的矩阵越界的时候,断言就会被触发:
let someValue = matrix[2,2]// this triggers an assert, because [2, 2] is outside of the matrix bounds |
Swift中文基础教程----下标的更多相关文章
- jsplumb 中文基础教程
jsplumb 中文基础教程 https://github.com/wangduanduan/jsplumb-chinese-tutorial
- swift编程语言基础教程 中文版
swift编程语言基础教程 中文版 http://download.csdn.net/detail/u014036026/7845491
- Apple Swift中文入门教程【转发】
1 简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS& ...
- Swift零基础教程2019最新版(一)搭建开发环境
Swift简单介绍 Swift是苹果强力推荐的新型开发语言,能开发苹果下属所有软件平台(iOS,iPadOS,macOS,watchOS,tvOS)初学者如果想进入苹果的开发体系,从Swift开始学习 ...
- ArcGIS学习推荐基础教程摘录
###########-------------------摘录一--------------------------########### ***************************** ...
- Java 初学者帮助文档以及基础教程
一下午的时间,大致看了一下Java的文档,进一步熟悉了Java的大体框架和结构,整理了一下有用的资源. 帮助文档: JSE 8 API 英文版 在线HTML格式:http://docs.oracle. ...
- Swift中文教程(一)--欢迎来到Swift的世界
原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始 ...
- Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...
- swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3 注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...
随机推荐
- 恢复 root 本地无权限 Access denied for user 'root'@'localhost' (using password: NO)
调试远程的时候,覆盖了本地的权限.导致 本地无法登陆系统表. 远程连接上mysql 执行以下命令恢复. 恢复root 本地管理权限 使用空密码 grant all on *.* to roo ...
- Debian/Ubuntu/CentOS VPS安装Net-Speeder并优化
安装过程: CentOS安装 wget --no-check-certificate https://gist.github.com/LazyZhu/dc3f2f84c336a08fd6a5/raw/ ...
- K2新网站(官网和BPM社区)正式上线了
K2新网站(官网和BPM社区)正式上线了 K2新网站(官网和BPM社区)正式上线了 K2新网站(官网和BPM社区)正式上线了 通常重要的事情要讲三遍, 官网:www.k2software.cn 社区: ...
- JS日期类型处理
Date 操作日期和时间的对象 Date.getDate( ) 返回一个月中的某一天 Date.getDay( ) 返回一周中的某一天 Date.getFullYear( ) 返回Date对象的年份字 ...
- jdbc escape
假如有这样1个查询请求,模糊查询标题中包含a%b_cc’d的记录,正确的sql应该是下面这样的: select * from t_sch_work_info t where t.title ...
- 用PHP抓取淘宝商品的用户晒单评论+图片实例
为什么想起来做这个功能?是因为前段时间在做一个淘客网站的时候,想到是否能抓取到淘宝商品的买家秀呢?经过一番折腾发现,淘宝商品用户评价信息是通过Ajax来调取的,通过嗅探网址发现,评论数据的请求接口是: ...
- Leetcode_实现zigzag的转换_20161228
#include<iostream> //#include<valarray> #include<vector> #include<string> us ...
- 原生js实现放大镜效果
今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个 ...
- Jacoco入门
Jacoco介绍 转自:wangmuming 的博客 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaA ...
- github代码收集推荐
https://github.com/AFNetworking/AFNetworkinghttps://github.com/jessesquires/JSQMessagesViewControlle ...