Swift中类函数的重要性是什么?

时间:2016-08-31 06:52:12

标签: swift static-methods

考虑下面的课程:

class Downloader {

    class func downloadImageWithURL(url:String) -> UIImage! {
        let data = NSData(contentsOfURL: NSURL(string: url)!)
        return UIImage(data: data!)
    }

}

downloadImageWithURL声明为类方法而不是实例方法有什么好处?

2 个答案:

答案 0 :(得分:3)

如果您想调用此类型方法,请编写

Downloader.downloadImageWithURL(...)

如果是实例方法,则需要先创建一个对象:

let downloader: Downloader = Downloader()
downloader.downloadImageWithURL(...)

在其他语言(例如C ++,Java)中,您将谈论static vs. non-static functions

本身没有优点或缺点,这是一个设计决定,一个非常重要的决定!我现在想到的一条经验法则:如果不需要维护状态信息,请使用类型方法,否则使用实例方法.¹

Swift Langauge Reference中了解有关这些方法的更多信息。

¹与此同时,我写了这个经验法则,我想到了一些反例。因此,请将此视为一个非常粗略的经验法则,并阅读有关面向对象设计的更好的介绍。

答案 1 :(得分:1)

实例方法适用于给定类的具体实例,类型方法不适用。

显然,没有实例就无法调用实例方法。但它不仅仅是一项绩效决策,更多的是传达方法的内容或做法。

一个好的经验法则是:如果你不访问类的任何(实例)属性,它可能应该是一个类型方法。工厂方法是类型方法的一个很好的例子,但也是与类密切相关但不与实例绑定的任何东西。