假设我有一个类let geocoder = CLGeocoder()
的实例。
我现在可以调用geocodeAddressString
CLGeocoder
类的方法{/ 1}}。
geocoder.geocodeAddressString(myObject["Location"] as! String, completionHandler: {
(placemarks, error) -> Void in
...
}
虽然,为什么我不能直接做以下事情?
// I haven't instantiated the `CLGeocoder` class this time
CLGeocoder.geocoder.geocodeAddressString(myObject["Location"] as! String, completionHandler: { (placemarks, error) -> Void in
...
})
例如,我可以这样做:
// I don't instantiate the UIView class here
UIView.animateWithDuration(0.4, animations: {
() in
...
}
我什么时候必须实例化一个类,什么时候不应该?
答案 0 :(得分:2)
在你的第二个例子中,函数“animateWithDuration()”就是我们所说的 static 方法,这意味着你可以在不实例化该类的实例的情况下调用它。
在您的第一个示例中,由于您调用“地理编码器”的实例实际上并不是该类中的变量,因此您无法静态调用它。
一般来说,如果要使用静态方法,则不必实例化,但是如果要使用非静态方法,则必须使用该类的实例(实例化)版本。
这是面向对象编程的基础。