博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 类扩展(extension)
阅读量:7213 次
发布时间:2019-06-29

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

Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如下事情:

1,给已有的类添加计算属性和计算静态属性
2,定义新的实例方法和类方法
3,提供新的构造器
4,定义下标脚本
5,是一个已有的类型符合某个协议
(注意:扩展只能添加新的计算型属性,不能添加存储型属性,也不能添加新的属性监视器)
示例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
49
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:给Double增加mm,cm等方法,进行进制转换

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
extension
Double
{
    
func
mm()->
String
    
{
        
return
"\(self/1)mm"
    
}
    
func
cm()->
String
    
{
       
return
"\(self/10)cm"
    
}
     
    
func
dm()->
String
{
        
return
"\(self/100)dm"
    
}
     
    
func
m()->
String
    
{
        
return
"\(self/1000)m"
    
}
    
func
km()->
String
    
{
        
return
"\(self/(1000*1000))km"
    
}
}
 
var
value = 2000000000.0
println
(value.mm())
println
(value.cm())
println
(value.dm())
println
(value.m())
println
(value.km())

转载地址:http://kruym.baihongyu.com/

你可能感兴趣的文章
springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
查看>>
网站FLV播放器
查看>>
laravel中新增路由文件
查看>>
目标检测评价指标
查看>>
[Errno 2] No such file or directory
查看>>
OAuth2.0介绍
查看>>
30分钟轻松搭建网站应用
查看>>
Windows 图元文件
查看>>
centos7安装docker社区版
查看>>
我的友情链接
查看>>
linux之split命令
查看>>
数据库笔记5:外键的用途
查看>>
linux学习基础6之sed用法详解
查看>>
C#实战--对齐输出
查看>>
CentOS7 64位下MySQL区分大小写
查看>>
MySQL数据库备份与恢复
查看>>
cobbler学习(二)cobbler_常用知识
查看>>
TortoiseSVN客户端重新设置用户名和密码
查看>>
Linux centos vi / vim 使用技巧汇总
查看>>
Java中的类和接口
查看>>