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

Difference between struct static func vs class static func in swift?

我找不到class static functionstruct static function之间的区别。我知道类静态函数不能被继承,结构也没有继承选项。

Please do not get confused by static func and class func in class.

1
2
3
4
class a {
    static func myMethod1() {
    }
}

VS

1
2
3
4
struct a {
    static func myMethod1() {
    }
}


这是一种延伸,但是由于classstruct类型的引用和值语义,在实现一个希望使用类型方法(static)来改变类型的私有属性的情况时,存在细微的差异,因为已经提供了该类型的实例。再次强调,这是一种延伸,因为它关注的是实现细节上的差异,而不是两者之间的具体差异。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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(){
    }
}


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

static and class both associate a method with a class, rather than an
instance of a class. The difference is that subclasses can override
class methods; they cannot override static methods.

class properties will theoretically function in the same way
(subclasses can override them), but they're not possible in Swift yet.

在swift中静态func和类func有什么区别?

Swift类中的静态与类函数/变量?