2015-03-13 65 views
2

在扩展章,它说:Swift:为什么不能添加扩展存储属性?什么是储存性能和计算性能之间的不同内存

扩展斯威夫特可以:

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

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

存储属性需要存储,而计算属性不需要。 – 2015-03-13 06:20:48

+0

为什么?计算的属性和存储的属性在内存或分配中有什么不同? – 2015-03-20 02:21:18

回答

10

假设你有一门课Int存储属性。当创建一个实例时,存储被分配为只包含一个属性。

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

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

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

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

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

+1

感谢您的及时回答。但为什么它可以添加一个计算属性? – 2015-03-20 02:18:43

+0

由于添加计算属性就像添加新方法一样 - 存储不受影响。 – Antonio 2015-03-21 10:41:46

+0

非常感谢:) – 2015-03-23 09:58:48

相关问题