自己用 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 而是添加一个语义 属性 来描述您要存储的内容。 (标签也意味着是唯一的,任意数据可能不是。)