【问题标题】:What's the difference between struct and typealias in swift?swift中的struct和typealias有什么区别?
【发布时间】:2016-10-28 09:03:26
【问题描述】:

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

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 很像类,因为你可以在其中添加方法。但是对于这样的事情,我通常直接使用类。

【问题讨论】:

  • 至少有一个显着的相似之处:两个 sn-ps 都不能编译 ;-)
  • @vadian ;_;我已经修好了...

标签: swift struct type-alias


【解决方案1】:

您将structtypealias of a tuple 进行比较。

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

  1. 结构可以符合协议,元组不能
  2. 结构可以有方法,元组不能
  3. 结构可以有计算属性,元组不能
  4. 结构可以有初始化器,元组不能

注意事项

我建议您为模型使用 struct。它更适合模型值。

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

【讨论】:

  • 我明白了。对于 struct 来说,这是一个非常有力的论据。是的,有时我在类中使用计算属性,当我想添加它时,我绝对不想受到限制。我确实在考虑制作模型。谢谢!
【解决方案2】:

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

当您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 所做的那样。

【讨论】:

  • 啊,我现在看到了这两者之间不同的哲学用法。我想我会坚持我的结构!但现在我知道何时使用元组的适当时间。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 2019-05-06
相关资源
最近更新 更多