我想封装一个实用程序函数。我在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
答案 0 :(得分:1)
您还可以在枚举上使用静态函数:
enum testEnum {
static func methodEnum() {}
}
因为没有初始化程序就无法实例化枚举,所以封装效果更好。
答案 1 :(得分:0)
在类中,您可以将class关键字用于那些可以在子类中覆盖的函数。 Swift还支持你不能在ObjC中使用的全局函数......
如果您确定没有必要使用例如类绑定协议或继承,那么您可以使用结构。如果你不确定,那就用class。
然而,这更像是一个概念讨论为什么你需要一个实用工具类。在大多数情况下,您可能希望创建现有框架对象的扩展,而不是创建一个疯狂的巨大&#34; Utility.swift&#34;。