2015-11-18 43 views
3

究竟是什么意思一个函数被这样定义:斯威夫特 - 类和FUNC关键字

class Foo { 
    private class func bar() { 
     //do something cool 
    } 
} 

换句话说,什么是这里的class关键字的目的是什么?

使用Swift 2.1。

+1

[ “夫特语言参考”](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html) - >语言指南 - >方法 - >类型方法。 –

回答

5

classstatic方法通过类型而不是实例调用。

let x = NSString.pathWithComponents(["/", "usr", "local", "bin", "brew"]) 

任何类型的可以具有static方法,可以在类只发生class方法。子类可以覆盖class方法,但不能覆盖static

class Foo { 
    class func bar() -> String { 
     return "foo bar" 
    } 
    static func baz() -> String { 
     return "foo baz" 
    } 
} 
class Bar: Foo { 
    override class func bar() -> String { 
     return "bar bar" 
    } 
} 
1

它是一个类函数,所以你可以在一个类上调用它,没有类实例。它与java/C++中的静态一样

class A { 
    public class func f() { 
     print("hey") 
    } 
} 

A.f() 
3

它只是在类本身而不是类的一个实例上声明函数。

class Foo { 
    private class func omg() -> String { 
     return "OMG" 
    } 
} 

Foo.omg() => "OMG" 

调用

let f = Foo() 

f.omg() => Static member 'omg' cannot be used on instance of type 'Foo' 

所以,你可以看到其中的差别

1

class关键字的目的,在函数签名声明该功能必须在类的类型本身被调用。也就是说,您不需要实例化类的类型的对象,实际上不能在类型的实例上调用此函数。

Cocoa Touch中有这样的例子。以UIImage(名为:String)。 UIImage类为您提供了按照名称从包中获取图像的功能。但是没有UIImage的实例可以调用这个方法(事实上,因为这个函数调用是你用来获取图像的东西,所以不会有这个函数调用)。