自己用 UIButton 的 .tag 属性 可以吗?
Is it ok to use UIButton's .tag property for myself?
我意识到我可以创建一个 UIButton 的子类来添加自定义属性:
class myButton: UIButton {
var viewBounds : CGRect = .zero
...
}
不过我现在只需要每个按钮存一个Int,我没有用storyboard,很多贴子都说用tag就可以了属性.
我的问题是,这真的安全吗?考虑到未来可能发生的变化。等等等等? “很多帖子”和官方回答不一样,我在官方文档中似乎找不到答案。
这取决于您要使用 tag
属性 的目的。来自 UIView.tag
docs,您可能已经看到:
An integer that you can use to identify view objects in your application.
</snip>
You can set the value of this tag and use that value to identify the view later.
tag
的目的是成为一个任意的 user-settable 属性,当您没有命名时,您可以使用它来区分同一类型的不同视图参考他们。
UIKit 本身永远不会设置 tag
因为 属性 是由您(应用程序开发人员)设置的;但是,这并不意味着您使用的某些第 3 方框架保证不会破坏 tag
值。因为 tag
存在于某种“全局”命名空间中(所有代码都等于 access/knowledge 到 tag
,不像 属性 你可能会添加自己),不同的人可能会尝试将 tag
用于不同的事物。
如果您自己创建视图对象,并直接管理视图层次结构,那么使用 相对 是安全的 tag
。另一方面,如果您从另一个框架获取视图,或允许另一个框架为您管理视图,它可能会使用 tag
用于自己的目的。
从你的问题来看,前者很可能是这种情况,但如果你需要更有力的保证,你最好添加另一个 属性 来更直接地标识你想要使用的视图.
您还没有指定要使用 tag
for 的内容,但如果您只需要存储一个 Int
就完全可以了与识别按钮无关,我建议不要使用 tag
而是添加一个语义 属性 来描述您要存储的内容。 (标签也意味着是唯一的,任意数据可能不是。)
我意识到我可以创建一个 UIButton 的子类来添加自定义属性:
class myButton: UIButton {
var viewBounds : CGRect = .zero
...
}
不过我现在只需要每个按钮存一个Int,我没有用storyboard,很多贴子都说用tag就可以了属性.
我的问题是,这真的安全吗?考虑到未来可能发生的变化。等等等等? “很多帖子”和官方回答不一样,我在官方文档中似乎找不到答案。
这取决于您要使用 tag
属性 的目的。来自 UIView.tag
docs,您可能已经看到:
An integer that you can use to identify view objects in your application.
</snip>
You can set the value of this tag and use that value to identify the view later.
tag
的目的是成为一个任意的 user-settable 属性,当您没有命名时,您可以使用它来区分同一类型的不同视图参考他们。
UIKit 本身永远不会设置 tag
因为 属性 是由您(应用程序开发人员)设置的;但是,这并不意味着您使用的某些第 3 方框架保证不会破坏 tag
值。因为 tag
存在于某种“全局”命名空间中(所有代码都等于 access/knowledge 到 tag
,不像 属性 你可能会添加自己),不同的人可能会尝试将 tag
用于不同的事物。
如果您自己创建视图对象,并直接管理视图层次结构,那么使用 相对 是安全的 tag
。另一方面,如果您从另一个框架获取视图,或允许另一个框架为您管理视图,它可能会使用 tag
用于自己的目的。
从你的问题来看,前者很可能是这种情况,但如果你需要更有力的保证,你最好添加另一个 属性 来更直接地标识你想要使用的视图.
您还没有指定要使用 tag
for 的内容,但如果您只需要存储一个 Int
就完全可以了与识别按钮无关,我建议不要使用 tag
而是添加一个语义 属性 来描述您要存储的内容。 (标签也意味着是唯一的,任意数据可能不是。)