class函数在Swift中的重要性是什么?
What is the importance of class function in Swift?
考虑下面的 class:
class Downloader {
class func downloadImageWithURL(url:String) -> UIImage! {
let data = NSData(contentsOfURL: NSURL(string: url)!)
return UIImage(data: data!)
}
}
将 downloadImageWithURL
声明为 class 方法而不是实例方法有什么好处?
如果你想调用这个类型方法,你写
Downloader.downloadImageWithURL(...)
如果是Instance Method,需要先创建一个对象:
let downloader: Downloader = Downloader()
downloader.downloadImageWithURL(...)
在其他语言中(例如 C++,Java),您会谈论 static vs. non-static functions。
本身没有优缺点之分,这是一个设计决定,非常重要!我现在想到的一条经验法则:如果不需要维护状态信息,请使用类型方法,否则使用实例方法。¹
在 Swift Langauge Reference 中阅读有关这些方法的更多信息。
¹ 在写这个经验法则的同时,我的脑海中浮现出一些反例。所以请将此视为一个非常粗略的经验法则,并阅读一些关于面向对象设计的更好的介绍。
实例方法适用于给定 class 的具体实例,类型方法则不然。
显然,您不能在没有实例的情况下调用实例方法。但这不仅仅是一个性能决定,更多的是关于传达方法是什么或做什么。
一个好的经验法则是:如果您不访问 class 的任何(实例)属性,它可能应该是一个类型方法。工厂方法是类型方法的一个很好的例子,但也是与 class 密切相关但不依赖于实例的任何东西。
考虑下面的 class:
class Downloader {
class func downloadImageWithURL(url:String) -> UIImage! {
let data = NSData(contentsOfURL: NSURL(string: url)!)
return UIImage(data: data!)
}
}
将 downloadImageWithURL
声明为 class 方法而不是实例方法有什么好处?
如果你想调用这个类型方法,你写
Downloader.downloadImageWithURL(...)
如果是Instance Method,需要先创建一个对象:
let downloader: Downloader = Downloader()
downloader.downloadImageWithURL(...)
在其他语言中(例如 C++,Java),您会谈论 static vs. non-static functions。
本身没有优缺点之分,这是一个设计决定,非常重要!我现在想到的一条经验法则:如果不需要维护状态信息,请使用类型方法,否则使用实例方法。¹
在 Swift Langauge Reference 中阅读有关这些方法的更多信息。
¹ 在写这个经验法则的同时,我的脑海中浮现出一些反例。所以请将此视为一个非常粗略的经验法则,并阅读一些关于面向对象设计的更好的介绍。
实例方法适用于给定 class 的具体实例,类型方法则不然。
显然,您不能在没有实例的情况下调用实例方法。但这不仅仅是一个性能决定,更多的是关于传达方法是什么或做什么。
一个好的经验法则是:如果您不访问 class 的任何(实例)属性,它可能应该是一个类型方法。工厂方法是类型方法的一个很好的例子,但也是与 class 密切相关但不依赖于实例的任何东西。