[Swift]实例方法和类型方法

作为封装了数据结构的类,不仅仅是封装了对象的属性,还封装了属性相关的操作。这些操作,在类里面这就叫方法,在有的面向对象术语里也叫消息,或者成员函数,因为像属性一样,依附于某一个对象。但是不只叫函数,因为函数我们往往特制独立的程序模块,不依赖于类而存在。

按照惯常的说法,函数是一等公民,类也是,函数与类是一个等级的,而类的各种类型的方法是从属于类的,没有类就没有所谓类的各种类型的方法。

实例方法

实例方法,在类的内部的定义和实现上看起来同函数没有区别,不过是能直接访问类的属性。

在访问类的属性时,直接引用属性的名称即可,当然也可以加一个“self”前缀。类的每个实例都有一个隐含属性self,self方法等同于该实例本身。

class Rect
{
    var width:Int = 0
    var height:Int = 0

    fun setSize(w:Int,height:Int)
    {
        width = w
        self.height = height
    }
    func getArea()->Int
    {
        return width*height
    }
}

var rect = Rect()
rect.setSize(10,height:20)
println(rect.getArea())

类型方法

正如类的变量属性一样,必须依附于某个具体的类实例而存在,不能直接调用。

类型方法不属于任何一个类,而是属于公共的类,可以通过类名直接调用,但是正是如此,它也不能调用变量属性,因为使用类型方法,并不需要初始化类,没有空间存储对象,因而也并没有空间来保存对象。类型方法在其他语言中,一般称之为静态方法或者类方法。

类型方法的定义:

class Rect 
{
    private struct swidth{static var width:Int = 0}
    public class var width:Int 
    {
        get{return swidth.width}
        set{swidth.width = newValue}
    }
    private struct sheight{static var height:Int = 0}
    public class var height:Int 
    {
        get{return sheight.width}
        set{swidth.height = newValue}
    }

    class func getArea()->Int
    {
        Rect.width = w
        Rect.height = height
    }

    class func getArea() ->Int
    {
        return Rect.width * Rect.height
    }
}

在类型方法setSize的内部,我们也不再使用self这样的关键字。因为在类型方法的定义中,使用self是不允许的,因为self代表的是当前实例,而类型方法被调用时不依存于任何实例,所以在类型方法中,只能使用类型属性,而不能使用一般的实例属性。

你可能感兴趣的:(swift)