swift 笔记 (十八) —— 扩展

扩展
扩展可以让我们给一个已有的类、结构体、枚举等类型添加新功能,包括属性和方法,甚至是构造器,下标,支持协议等等。。。

甚至是我们拿不到源代码的类、结构体、枚举,我们依然可以给它加扩展。。。

看到这里的时候,我还有点小激动呢。。。可是淡定下来之后,觉得这TMD就是个大大的 飞线,飞线,飞线。。。这让我们的代码难以理解全面(总要担心是不是哪里还有扩展,我没读到的。。谁会不会在哪写个飞线出来以达到他不可告人的秘密,所以我们不得不在“代码规范”里写:扩展必须紧挨着类的实现写。可是拿不代码的类呢?我们还要规定必须给文件名起一个类似xxxxExtensions.swift 或者 xxxxDelegate.swift 这样的名字。。。为何不让用户通过代理模式去做这样的事情,反而是提供了这样一个反代码反人类的特性。。。)

不管怎么说,既然提供了这样的东西,还是记录一下这个奇葩的方式吧。

语法:
extension MyClass {
     //要扩展的属性,方法,等功能写在这里
}

extension MyClass : MyProtocol {           //协议在后面的笔记里再说,这里只是提一下
     //要扩展的属性,方法,等功能写在这里
}

扩展可以做的事儿:
1. 添加计算型属性和计算型静态属性
2. 定义实例方法和类型方法
3. 提供新的构造器
4. 定义下标
5. 定义和使用新的嵌套类型
6. 使一个已有的类型遵守某个协议

之前在写一个例子的时候,发现 Int没有toString方法,于是,我们借助扩展的强大功能,现在可以让Int有toString方法了:

extension  Int  {
    
func  toString()-> String  {
        
var  tmpArray = [ "0" , "1" , "2" , "3" , "4"
                       ,
"5" , "6" , "7" , "8" , "9" ]
        
var  tmpNum =  self
        
var  tmpString =  ""
        
while  tmpNum >  0  {
            tmpString = tmpArray[tmpNum % 
10 ] + tmpString
            tmpNum /= 
10
        }
        
return  tmpString
    }
}

var  myNum: Int  =  6234232
println(myNum . toString ())

注意:这只是个玩具(示例),如果用到项目中的话,请考虑更好的写法。
至于文档中提到的构造器,下标,mutating方法,嵌套类型,无非都是这样。。再简单不过,自己写着玩就好了。不列了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值