我想知道什么是跟踪相同类型不同对象的好方法。
我具有此功能:
private extension MenuButtonsViewController {
// TODO: Find a way to find correct button based on MenuItem
func buttonFor(for menuItem: MenuItem) -> EmojiButton? {
guard let subViews = stackView.subviews as? [EmojiButton] else {
return nil
}
let button = buttonFactory.makeEmojiButton(title: menuItem.icon)
for subView in subViews where subView == button {
return subView
}
return nil
}
}
我有一个数组(UIStackView
),其中按钮(EmojiButton
)的数量不同。这些按钮是根据MenuItem
中的内容创建的。
我正在寻找一种好的清洁方法,如何基于stackView
从MenuItem
数组中查找和删除特定按钮。
到目前为止,我有三个想法:
==
进行匹配。 (以上解决方案)。这没用。id
添加到所有按钮,然后将相应的id
添加到MenuItem
对象。但这似乎不是一个优雅的解决方案,必须将其添加到所有位置,并从按钮对象中公开此变量。MenuItemButton
一起存储在包装类中(例如id
),或者通过存储MenuItem
对象来与之匹配。 有什么想法吗?通常如何做?
答案 0 :(得分:1)
如果MenuItem
和EmojiButton
继承自UIView
,则可以利用所有tag
上可用的UIView
属性。
您首先需要为每个tag
分配一个唯一的MenuItem
值。
然后,您需要将此相同的值分配给相应的表情符号按钮的tag
属性。 (这将是在您工厂里做的一件好事。)
完成此操作后,您可以按如下所示修改函数:
//assumes MenuItem and EmojiButton inherit from UIView
func buttonFor(for menuItem: MenuItem) -> EmojiButton? {
return stackView.viewWithTag(menuItem.tag) as? EmojiButton
}