Swift - 类和func关键字

时间:2015-11-18 20:35:51

标签: swift

以这种方式定义函数究竟意味着什么:

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

换句话说,第二个class 关键字的目的是什么?

使用Swift 2.1。

4 个答案:

答案 0 :(得分:6)

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 :(得分: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'

所以你可以看到差异

答案 2 :(得分:1)

它是一个类函数,所以你可以在类上调用它,没有类实例。它与java / c ++中的static相同

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

A.f()

答案 3 :(得分:1)

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

Cocoa Touch有这样的例子。以UIImage(命名:String)为例。 UIImage类为您提供了通过其名称从包中获取图像的功能。但是没有UIImage的实例可以调用这个方法(事实上,没有,因为这个函数调用是你用来获取图像的第一个)。