类和结构体的区别 计算属性 struct Rectangle { var width: Double var height: Double // 这是一个计算属性 var area: Double { get { return width * height } set { // 假设保持宽高比例不变 let ratio = width / height height = sqrt(newValue / ratio) width = height * ratio } } } 关联对象 Category 和 Extension 的区别 Category(分类): 可以在不修改原类源代码的情况下给类添加方法 不能添加实例变量(存储属性),但可以使用关联对象 可以被添加到任何类中,包括没有源码的类 在运行时添加方法 可以有多个分类 Extension(扩展): 只能在原类的实现文件(.m文件)中添加 可以添加实例变量和属性 必须在类的主实现文件中实现所有声明的方法 在编译时添加特性 只能有一个扩展 @interface MyClass () // Extension 1 @property (nonatomic, strong) NSString *property1; @end @interface MyClass () // Extension 2 @property (nonatomic, strong) NSString *property2; @end // 编译后相当于只有一个扩展 @interface MyClass () @property (nonatomic, strong) NSString *property1; @property (nonatomic, strong) NSString *property2; @end OC 可以动态添加属性或方法,但开销较大、类型安全性差、降低代码可维护性和可读性,swift 中限制了这种方式。
...