结构静态方法与类静态方法

时间:2018-01-19 13:32:24

标签: swift

我想封装一个实用程序函数。我在Struct和Class类型之间犹豫不决。下面是源代码和反汇编代码。

我可以提到的Struct和Class类型之间的区别是:Value vs Reference Type,Stack vs Heap allocation。

Stack和Class类型之间有什么其他区别?

哪种类型是封装实用程序函数的最佳类型?

代码

struct testStruct {
   static func methodStruct() { }
}

class testClass {
   static func methodClass() { }
}

拆卸

test`static testStruct.methodStruct():
    0x10c168780 <+0>: pushq  %rbp
    0x10c168781 <+1>: movq   %rsp, %rbp
->  0x10c168784 <+4>: popq   %rbp
    0x10c168785 <+5>: retq   

test`static testClass.methodClass():
    0x10c168790 <+0>: pushq  %rbp
    0x10c168791 <+1>: movq   %rsp, %rbp
    0x10c168794 <+4>: movq   %r13, -0x8(%rbp)
->  0x10c168798 <+8>: popq   %rbp
    0x10c168799 <+9>: retq   

2 个答案:

答案 0 :(得分:1)

您还可以在枚举上使用静态函数:

enum testEnum {
  static func methodEnum() {}
}

因为没有初始化程序就无法实例化枚举,所以封装效果更好。

答案 1 :(得分:0)

在类中,您可以将class关键字用于那些可以在子类中覆盖的函数。 Swift还支持你不能在ObjC中使用的全局函数......

如果您确定没有必要使用例如类绑定协议或继承,那么您可以使用结构。如果你不确定,那就用class。

然而,这更像是一个概念讨论为什么你需要一个实用工具类。在大多数情况下,您可能希望创建现有框架对象的扩展,而不是创建一个疯狂的巨大&#34; Utility.swift&#34;。