Swift - 下标脚本方法介绍及实例
定义下标脚本之后,可以使用“[]”来存取数据类型的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
class SubString { var str: String = "" init (str: String ) { self .str = str; } /**下标脚本:获取/设置部分字符串**/ subscript(start: Int , length: Int ) -> String { get { return (str as NSString ).substringWithRange( NSRange (location: start, length: length)) } set { var tmp = Array (str) str = "" var s = "" var e = "" for (idx, item) in enumerate (tmp) { if (idx < start) { s += "\(item)" } if (idx >= start + length) { e += "\(item)" } } str = s + newValue + e } } /**下标脚本:获取/设置字符**/ subscript(index: Int ) -> String { get { return String ( Array (str)[index]) } set { var tmp = Array (str) tmp[index] = Array (newValue)[0] str = "" for (idx, item) in enumerate (tmp) { str += "\(item)" } } } } var str = SubString (str: "hangge.com" ) println (str[7,3]) //获取字符串:com println (str[7]) //获取字符:c str[7,3] = "COM" //设置部分字符串 str[0] = "H" //设置部分字符 println (str[0,10]) |
示例1改进:通过类扩展,也可以直接给String类添加索引功能,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
extension String { subscript(start: Int , length: Int ) -> String { get { return ( self as NSString ).substringWithRange( NSRange (location: start, length: length)) } set { var tmp = Array ( self ) var s = "" var e = "" for (idx, item) in enumerate (tmp) { if (idx < start) { s += "\(item)" } if (idx >= start + length) { e += "\(item)" } } self = s + newValue + e } } subscript(index: Int ) -> String { get { return String ( Array ( self )[index]) } set { var tmp = Array ( self ) tmp[index] = Array (newValue)[0] self = "" for (idx, item) in enumerate (tmp) { self += "\(item)" } } } } var str = "hangge.com" println (str[7,3]) println (str[7]) str[7,3] = "COM" str[0] = "H" println (str[0,10]) |
示例2:使用一维数组结合下标方法一定程度上模拟实现了二维数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
class Matrix { let rows: Int , columns: Int var grid: [ Double ] init (rows: Int , columns: Int ) { self .rows = rows self .columns = columns grid = Array (count: rows * columns, repeatedValue: 0.0) } func indexIsValidForRow(row: Int , column: Int ) -> Bool { return row >= 0 && row < rows && column >= 0 && column < columns } subscript(row: Int , column: Int ) -> Double { get { assert(indexIsValidForRow(row, column: column), "Index out of range" ) return grid[(row * columns) + column] } set { assert(indexIsValidForRow(row, column: column), "Index out of range" ) grid[(row * columns) + column] = newValue } } } var value = Matrix (rows: 20,columns: 20) value[10,10] = 20 println (value) |
Swift - 下标脚本方法介绍及实例的更多相关文章
- Swift—下标脚本(Subscripts)
下标脚本可以定义在类(Class).结构体(Struct).枚举(enumeration)这些目标中,可以认为是访问集合,列表或序列的快捷方式,使用下标脚本的索引设置和获取值,不需要再调用实例的特定的 ...
- Swift 下标脚本
前言 在访问一个数组实例的元素时,可以使用 Array[index] 的形式.在访问一个字典实例的元素时,可以使用 Dictionary[index] 的形式.这种方括号的形式就是 "下标脚 ...
- MS SQL批量生成作业脚本方法介绍总结
在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...
- swift学习笔记之-下标脚本
//下标脚本subscript import UIKit /*下标脚本(Subscripts) 下标脚本: 1.可以定义在类(Class).结构体(structure)和枚举(enumeration) ...
- 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承
1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ...
- Swift枚举|结构体|类|属性|方法|下标脚本|继承
1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ...
- Swift的属性,方法,下标脚本以及继承
从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助. 属性 存储属性 ...
- iOS - Swift Subscript 下标脚本
1.Subscript 下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值.语法类似于实例方法和计算型属性的混合.与定义实例方法类似,定义下标脚本使用 subscri ...
- swift具体解释之八---------------下标脚本
swift具体解释之八-----下标脚本 下标脚本 能够定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中.能够觉得是訪问对象.集合或序列的快捷方式.不须要 ...
随机推荐
- Selenium Grid跨浏览器-兼容性测试
Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...
- ant学习记录(复制-移动-删除-依赖综合测试)+fileset
<?xml version="1.0"?> <project name="targetStudy" default="mkdir&q ...
- Linux C++ 开发简介(包括Linux守护线程)
阅读目录 简介 操作系统 编辑器 编译器 构建系统 调试 IDE 可执行程序.动态库.静态库 服务 Windows服务简介 创建Windows服务 注册Windows服务 管理Windows服务 Li ...
- Ultra Office Control 2.0
http://www.ultrashareware.com/Ultra-Office-Control.htm
- maven setting配置
<?xml version="1.0" encoding="UTF-8"?> <!--Licensed to the Apache Softw ...
- ASP.NET - 后台获取按钮绑定的值CommandArgument
<asp:LinkButton runat="server" ID="resumelbtn" CommandArgument='<%# Eval(& ...
- 使用awk和grep做简单的统计
grep 或 egrep 或awk 过滤两个或多个关键词: grep -E ‘123|abc’ filename // 找出文件(filename)中包含123或者包含abc的行 egrep ‘123 ...
- Linux主机上发布java web应用
1.链接远程主机命令 ssh user@hostname 如: shh root@192.168.1.1 2.查看主机操作系统版本 uname -a 3.linux系统安装mysql a)检查是否安装 ...
- 阿里巴巴 web前端性能优化进阶路
Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化 ...
- UVA它11292 - Dragon of Loowater
Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...