【Swift】Classes与Structures, Any与AnyObject

1. Classes vs. Structures

classes和structures在Swift里有很多共同点,他们都可以:

  • 定义属性(properties)
  • 定义方法(methods)
  • 定义下标(subscripts)
  • 定义初始化器(initializers)
  • 可以被延展(extension)
  • 可以继从协议(protocol)

他们的区别有:

  • class有继承性(Inheritance);
  • class可以进行type casting;
  • 若要修改属性的值,structure里的函数需加mutating关键字;
  • class的类方法用class关键字,structure用static;
  • struct是值类型(Value Types),赋值时传递变量一个copy;class是引用类型(Reference Types),赋值时传递指针;

Swift中String、Array、Dictionary等都是struct类型。

那我们应该什么时候使用structure类型呢?苹果官方给出了如下指示:

  • 需要封装简单的数据类型时;
  • 希望传递其值而非指针时;
  • 其属性也是值类型时;
  • 不需要从其他类型继承属性或行为时。

2. Any vs. AnyObject

  • Any可以代表任何类型的实例,包括函数;
  • AnyObject可以代表任何类类型的实例(class type)。

具体请参考苹果官方Doc。

你可能感兴趣的:(【Swift】Classes与Structures, Any与AnyObject)