结构静态函数与swift中的类静态函数之间的区别?

时间:2017-03-31 08:19:37

标签: swift struct

我无法找到class static functionstruct static function之间的任何差异。据我所知,类静态函数不能被继承,struct也没有继承选项。

  

请不要因为类中的静态函数和类函数而感到困惑。

class a {
    static func myMethod1() {
    }
}

VS

struct a {
    static func myMethod1() {
    }
}

3 个答案:

答案 0 :(得分:2)

这是一种延伸,但由于classstruct类型的引用vs值语义,分别在你想要制作的情况的实现中有细微差别在给定类型的实例的情况下,使用类型方法(static)来改变该类型的私有属性。再次,有点延伸,因为这侧重于实施细节的差异,而不是两者之间的具体差异。

class的情况下,可以向static方法提供不可变引用,该方法又可以用于改变该类型的私有实例成员。在struct的情况下,类型的实例自然需要作为inout参数提供,因为更改值类型的实例成员的值也意味着更改实例的值本身。

class A {
    private(set) var i: Int = 0
    static func foo(_ bar: A) { 
        bar.i = 42
    }
}

struct B {
    private(set) var i: Int = 0
    static func foo(_ bar: inout B) { 
        bar.i = 42  
    }
}

let a = A()
var b = B()

A.foo(a)
print(a.i) // 42
B.foo(&b)
print(b.i) // 42

答案 1 :(得分:0)

区别在于子类可以覆盖类方法,但不能覆盖静态方法。

以下是在Playground中测试的简单示例

class A{
    class func classFunction(){
    }
    static func staticFunction(){
    }
}

class B: A {
    // override successfully
    override class func classFunction(){
    }

    //Compile Error. Cannot override static method
    override static func staticFunction(){
    }
}

答案 2 :(得分:-1)

这些链接可以帮助您了解这些功能。正如@mipadi says(强调我的):

  

staticclass都将方法与类关联,而非关联   一个类的实例。 不同之处在于子类可以覆盖   class方法;他们无法覆盖static方法。

     

class属性在理论上将以相同的方式起作用   (子类可以覆盖它们),但它们在Swift中是不可能的。

What is the difference between static func and class func in Swift?

Static vs class functions/variables in Swift classes?