Extension

/*

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

//注意只能扩展类中的convenienceinit,而structinit则没有限制

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() //使用扩展的便利构造器来创建对象


//《完》

你可能感兴趣的:(Extension)