当前位置: 首页 > 知识库问答 >
问题:

Swift中struct静态函数与class静态函数的区别?

蓟安歌
2023-03-14

我找不到类静态函数结构静态函数之间的任何区别。据我所知,类静态函数不能被继承,struct也没有继承的选项。

请不要被类中的静态函数和类函数所混淆。

class a {
    static func myMethod1() {
    }
}

VS

struct a {
    static func myMethod1() {
    }
}

共有1个答案

潘彦
2023-03-14

这有点牵强,但由于classstruct类型分别具有引用vs值语义,因此在实现一种情况时存在细微的差异,即如果提供了类型的实例,您希望使用类型方法(statice)来更改该类型的私有属性。同样,这是一种延伸,因为它关注的是实现细节的差异,而不是两者之间的具体差异。

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
 类似资料:
  • 问题内容: 我试图弄清楚如何声明一个静态变量,其范围仅限于Swift中的函数。 在C中,这可能看起来像这样: 在Objective-C中,基本上是相同的: 但是我似乎无法在Swift中做这样的事情。我尝试通过以下方式声明变量: 但是这些都会导致错误。 第一个抱怨“静态属性只能在类型上声明”。 第二个抱怨“期望的声明”(在哪里)和“期望的模式”(在哪里) 第三条抱怨“一行上的连续语句必须用’;’分隔

  • 问题内容: 我可以在Swift库中看到这些定义: 定义为的成员函数与定义为的另一个成员函数有什么区别?仅仅是为了结构和枚举的静态功能,以及用于类和协议吗?还有其他应该知道的区别吗?在语法本身中具有这种区别的原理是什么? 问题答案: 是否仅将static用于结构和枚举的静态函数,将class用于类和协议? 那是主要区别。其他一些区别是类函数是动态调度的,并且可以被子类覆盖。 协议使用class关键字

  • 我可以在Swift库中看到这些定义: 定义为的成员函数和定义为的成员函数之间有什么区别?简单地说,是用于结构和枚举的静态函数,而是用于类和协议吗?还有什么其他的不同之处是你应该知道的吗?语法本身有这种区别的理由是什么?

  • 问题内容: 我对php中的静态功能有疑问。 假设我有一堂课 如果我这样做的话,没有问题。 也可以。 头等舱和二等舱有什么区别? 静态函数有什么特别之处? 问题答案: 在第一个类中,实际上是一个实例方法,您将其作为静态方法进行调用,但由于从未引用,所以您将其取消。 静态函数与该类相关联,而不是该类的实例。因此,在静态上下文中不可用(未指向任何对象)。

  • 问题内容: 我想创建一个将保留所有实用程序方法的类,并将在整个应用程序中使用这些方法。 问题:1 创建一个单例类并在其中保留所有必需的方法是好事,还是应该创建一个所有函数都是静态的类? 问题:2 快速的上述两种方法之间的主要区别是什么? 问题:3 它会如何影响iOS的性能? 问题答案: 当然,这听起来令人困惑并且可以辩论。但是,从最佳实践中,我可以提出一些建议。 Singleton 通常用于创建资

  • 我有一个从缓存实例中获取数据的函数,我需要对其进行模拟 IdentityActionsCache类 JUnit与powermock 我无法模仿IdentityActionsCache。getInstance()。getIdentityActionsByName(操作)获取空指针 JAVAcom上的lang.NullPointerException。alnt公司。idm。使用者身份服务。Identi