我无法找到class static function
到struct static function
之间的任何差异。据我所知,类静态函数不能被继承,struct也没有继承选项。
请不要因为类中的静态函数和类函数而感到困惑。
class a {
static func myMethod1() {
}
}
VS
struct a {
static func myMethod1() {
}
}
答案 0 :(得分:2)
这是一种延伸,但由于class
和struct
类型的引用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(强调我的):
static
和class
都将方法与类关联,而非关联 一个类的实例。 不同之处在于子类可以覆盖class
方法;他们无法覆盖static
方法。
class
属性在理论上将以相同的方式起作用 (子类可以覆盖它们),但它们在Swift中是不可能的。
What is the difference between static func and class func in Swift?