在扩展章,它说:Swift:为什么不能添加扩展存储属性?什么是储存性能和计算性能之间的不同内存
扩展斯威夫特可以:
添加计算性能和计算的静态属性 定义实例方法和类型的方法 提供新初始化 定义标 定义和使用新的嵌套类型 使现有类型符合协议
- 但为什么不存储属性?
- 内存存储和分配有什么不同?
在扩展章,它说:Swift:为什么不能添加扩展存储属性?什么是储存性能和计算性能之间的不同内存
扩展斯威夫特可以:
添加计算性能和计算的静态属性 定义实例方法和类型的方法 提供新初始化 定义标 定义和使用新的嵌套类型 使现有类型符合协议
假设你有一门课Int
存储属性。当创建一个实例时,存储被分配为只包含一个属性。
接下来,您将创建一个扩展并添加String
类型的存储属性。创建实例时,存储分配为包含2个属性,即Int
和String
。
只要扩展名在范围内,该类就有2个属性。所有地方的扩展不可用(例如因为它是私人或内部),该类有1个属性,而不是。
很容易理解,两个不同环境中的同一个类与自身不兼容。
此外,您不能假定扩展可以公开在任何地方都可见。想想UIView
类:你创建一个扩展并添加一个存储的属性,这在你的项目中是可见的。但是UIView
也被UIKit实例化,例如在网点中,但它无法访问您的自定义扩展。
看到区别?添加新的存储属性实际上会创建一个与原始类型不同的新类类型 - 因此不允许。有一个具体的工具:继承。
感谢您的及时回答。但为什么它可以添加一个计算属性? – 2015-03-20 02:18:43
由于添加计算属性就像添加新方法一样 - 存储不受影响。 – Antonio 2015-03-21 10:41:46
非常感谢:) – 2015-03-23 09:58:48
存储属性需要存储,而计算属性不需要。 – 2015-03-13 06:20:48
为什么?计算的属性和存储的属性在内存或分配中有什么不同? – 2015-03-20 02:21:18