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

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

(本文代码已升级至swift3)
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
50
51
52
53
54
extension
String
{
    
subscript(start:
Int
, length:
Int
) ->
String
        
{
        
get
{
            
let
index1 =
self
.index(
self
.startIndex, offsetBy: start)
            
let
index2 =
self
.index(index1, offsetBy: length)
            
let
range =
Range
(uncheckedBounds: (lower: index1, upper: index2))
            
return
self
.substring(with: range)
        
}
        
set
{
            
let
tmp =
self
            
var
s =
""
            
var
e =
""
            
for
(idx, item)
in
tmp.characters.enumerated() {
                
if
(idx < start)
                
{
                    
s +=
"\(item)"
                
}
                
if
(idx >= start + length)
                
{
                    
e +=
"\(item)"
                
}
            
}
            
self
= s + newValue + e
        
}
    
}
    
subscript(index:
Int
) ->
String
        
{
        
get
{
            
return
String
(
self
[
self
.index(
self
.startIndex, offsetBy: index)])
        
}
        
set
{
            
let
tmp =
self
            
self
=
""
            
for
(idx, item)
in
tmp.characters.enumerated() {
                
if
idx == index {
                    
self
+=
"\(newValue)"
                
}
else
{
                    
self
+=
"\(item)"
                
}
            
}
        
}
    
}
}
 
var
str =
"hangge.com"
print
(str[7,3])
print
(str[7])
 
str[7,3] =
"COM"
str[0] =
"H"
 
print
(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"
    
}
}
 
let
value = 2000000000.0
print
(value.mm())
print
(value.cm())
print
(value.dm())
print
(value.m())
print
(value.km())
运行结果如下:

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

你可能感兴趣的文章
KM算法入门
查看>>
对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
查看>>
关于sql语句的优化问题
查看>>
SQL Server 2016新特性:数据库级别配置
查看>>
[Boost系列] Boost学习
查看>>
中美贸易战升级 医疗器械行业影响大
查看>>
exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp
查看>>
嵌入的iframe框架自适应宽度代码
查看>>
IPTABLES常用命令之配置生产环境IPTABLES及优化
查看>>
linux服务ssh详解
查看>>
cat命令一些不常用但很有用的参数
查看>>
linux文件的类型笔记
查看>>
UNIX/Linux 系统管理技术手册阅读(五)
查看>>
Scala之继承
查看>>
nginx日志统计分析
查看>>
linux密码策略
查看>>
git在本地仓库直接使用rm彻底删除文件,服务端还是存在
查看>>
双色球 脱壳加去效验
查看>>
php安装使用memcached
查看>>
#22 系统进程调度、at、batch、mail、crontab
查看>>