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。