博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 下标脚本方法介绍及实例
阅读量:5130 次
发布时间:2019-06-13

本文共 2832 字,大约阅读时间需要 9 分钟。

定义下标脚本之后,可以使用“[]”来存取数据类型的值。

示例1:实现一个我们自定的字符串类,可以方便的通过索引获取某一个字符值,或某一部分字符串。同时也可以通过索引,给某一部分赋值。
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)

转载于:https://www.cnblogs.com/Free-Thinker/p/4838104.html

你可能感兴趣的文章
P2916 [USACO08NOV]安慰奶牛Cheering up the Cow
查看>>
PV操作(转)
查看>>
软考笔记第六天之各排序算法的实现
查看>>
修补PHPRPC_Client中(JAVA版本),创建Socket连接时Timeout不起作用
查看>>
第五次作业160809308周子济
查看>>
Latex在texstudio中的参考文献编译
查看>>
Day 24 20190208 老男孩python学习第24天 内容整理
查看>>
php ascii hex编码
查看>>
Hadoop.2.x_网站PV示例
查看>>
EXTJS如何使用(转载)
查看>>
枚举 - 1.熄灯问题
查看>>
007grafana监控时间戳转换
查看>>
【2003-4】【分数计算】
查看>>
【2011-5】【最大乘积】
查看>>
一般计算 【2007】三3 C++版
查看>>
git使用总结
查看>>
2016-12-26 spoj STARSBC 欧拉函数水 spoj KAOS 字典树
查看>>
GoLang安装
查看>>
Spring 4 官方文档学习(十一)Web MVC 框架之HTTP caching support
查看>>
蓝桥杯历届试题 错误票据
查看>>