swift中struct和typealias之间的区别是什么?

时间:2016-10-28 09:03:27

标签: swift struct type-alias

我想要一个包含一个字符串和一个整数的数组。以下是什么区别:

struct People { var name: String!; var age: Int! };
var data = Array<People>();
data.append (People(name: "John Doe", age: 31));

使用:

typealias People = (name: String!, age: Int!);
var data = Array<People>();
data.append ((name: "John Doe", age: 31));

除了那之外的其他一切。我的意思是,在从struct切换到typealias时,访问数据,内存管理,指针问题或其他什么我应该警惕有什么不同吗?我通常使用struct,但后来我发现我有typealias作为替代。我只是想确定哪一个更适合我的日常使用。注意:我注意到struct就像你可以在那里添加方法一样。但对于这样的事情,我通常会直接上课。

2 个答案:

答案 0 :(得分:4)

您正在将structtypealias of a tuple进行比较。

结构比元组强大得多,这里只有结构提供的一些优点

  1. 结构符合协议,元组不能
  2. 一个结构可以有方法,一个元组可以
  3. 一个结构可以有计算属性,一个元组可以
  4. 一个结构可以有初始值设定项,一个元组可以
  5. 考虑

    我建议你为你的模型使用 struct 。它更适合模型价值。

    有一天,您需要为您的类型添加计算属性(如birthYear),并且您不希望受到简单元组限制的约束。

答案 1 :(得分:1)

结构和元组有不同的用途。

当您temporary需要几个相关数据时,请在方案中使用元组。它应该不定义任何新实体(例如Person)。

例如,当从函数返回多个值时使用元组:

func operations(a: Int, b: Int) -> (Int, Int) {
  return (a + b, a * b)
}
let (mySum, myMul) = operations(10, 5)
mySum // => 15
myMul // => 50

返回operations()的元组是临时存在的,直到将其数据提取到变量mySummyMul中。

该结构将长期使用的相关数据耦合在一起。此外,还允许定义对结构数据进行操作的方法(以及与继承相关的所有内容,符合协议) 使用它来定义实体及其在应用程序中的行为,例如您对People的行为。