【问题标题】:Swift: Why cannot add store property in extension? What's the different between store property and computed property in memorySwift:为什么不能在扩展中添加商店属性?内存中的存储属性和计算属性有什么区别
【发布时间】:2015-03-13 06:00:07
【问题描述】:

在扩展章节中,它说:

Swift 中的扩展可以:

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

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

【问题讨论】:

  • 存储属性需要存储,计算属性不需要。
  • 为什么?计算属性和存储在内存或分配中的属性有什么区别?

标签: swift properties


【解决方案1】:

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

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

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

很容易理解,同一个类在两个不同的上下文中是不兼容的。

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

看到区别了吗?添加一个新的存储属性实际上会创建一个与原始类不同的新类类型 - 所以它是不允许的。为此有一个特定的工具:继承

【讨论】:

  • 感谢您的及时答复。但是为什么它可以添加计算属性呢?
  • 因为添加计算属性就像添加新方法 - 存储不受影响。
猜你喜欢
  • 1970-01-01
  • 2020-03-03
  • 2016-04-29
  • 1970-01-01
  • 2011-11-14
相关资源
最近更新 更多