/*
Extensions提供了一个接口,在不改变即有类型的前提下添加自己的东西。
比如系统的类型Int我们是不能随便修改的,但是可以通过extension来扩展
1.添加computed properties和静态的computed static properties
2.定义实例方法和type methods 注意:不能override既存的函数
3.提供新的init
4.定义subscripts
5.定义和使用新的nested type
6.提供protocol遵循
如果某个类已经实现了某协议的所有规定,但是没有显示的继承,则可以extension class:protocol {}来声明.
可以看到swift自带的string实现中,右很多类似的使用方法。
从上面介绍可以看出,不能定义新的stored属性。
7.扩展一旦定义,所有的实例都会有效,即使实例的定义在扩展定义之前
*/
// 添加计算属性,扩展Int功能,强大啊
extension Int
{
var square:Int
{
return self * self
}
}
println(3.square) //给整形Int添加的新属性,太强大了!!!
// 扩展init
//注意只能扩展类中的convenience的init,而struct的init则没有限制
class base
{
var mem:Int
init(b:Int)
{
self.mem = b
}
}
extension base
{
/* 报错,不能扩展指定init
init(b:Int, b2:Int)
{
self.mem = b + b2
}
*/
// ERROR 只能扩展 computed 属性
//var newmem:Int
convenience init()
{
self.init(b:3)
mem = 4
}
}
var extensionVar =base() //使用扩展的便利构造器来创建对象
//《完》