Swift:为什么不能在扩展中添加商店属性?存储属性和内存中的计算属性之间的区别是什么

时间:2015-03-13 06:00:08

标签: swift properties

在Extensions章节中,它说:

Swift中的扩展程序可以:

添加计算属性和计算的静态属性 定义实例方法和类型方法 提供新的初始化程序 定义下标 定义并使用新的嵌套类型 使现有类型符合协议

  1. 但为什么不存储属性?
  2. 内存存储和分配有什么不同?

1 个答案:

答案 0 :(得分:14)

假设您有一个Int存储属性的类。创建实例时,会将存储分配为仅包含一个属性。

接下来,您将创建一个扩展并添加类型为String的存储属性。创建实例时,存储将分配为包含2个属性,IntString

只要扩展名在范围内,该类就有2个属性。所有扩展名不可用的地方(例如因为它是私有的或内部的),该类都有1个属性。

很容易理解,两个不同语境中的同一个类与自身不兼容。

此外,您不能假设扩展可以公开,随处可见。想想UIView类:您创建一个扩展并添加一个存储的属性,该属性在您的项目中可见。但是UIView也是由UIKit实例化的,例如在网点中,但它无法访问您的自定义扩展。

看到区别?添加新的存储属性实际上会创建一个与原始类型不同的新类类型 - 因此不允许这样做。有一个特定的工具:继承