Swift中struct static func与class static func之间的区别?

Ret*_*tro 6 struct swift

我无法找到任何区别class static functionstruct static function。据我所知,类静态函数不能被继承,而struct没有继承选项。

请不要在课堂上被static func和class func弄糊涂。

class a {
    static func myMethod1() {
    }
}
Run Code Online (Sandbox Code Playgroud)

struct a {
    static func myMethod1() {
    }
}
Run Code Online (Sandbox Code Playgroud)

dfr*_*fri 7

这是一种延伸,但由于classstruct类型的引用语义与值语义分别不同,在您想要使用类型方法 ( 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
Run Code Online (Sandbox Code Playgroud)