Swift 最佳实践:如何跟踪不同的对象?
Swift best practice: How to keep track of different objects?
我想知道跟踪同一类型的不同对象的好的解决方案是什么。
我有这个功能:
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
中的内容创建的。
我正在寻找一个好的和干净的解决方案,如何根据 MenuItem
.
从 stackView
数组中查找和删除特定按钮
到目前为止我有三个想法:
- 要创建一个新对象,使用与要删除的对象相同的值进行初始化,然后使用
==
进行匹配。 (上面的解决方案)。这没有用。
- 给所有按钮添加一个
id
,然后给MenuItem
对象添加一个对应的id
。但这似乎不是一个优雅的解决方案,必须在任何地方添加它,并从按钮对象中公开这个变量。
- 也许可以将按钮存储在包装器 class(如
MenuItemButton
)中,并匹配 id
,或者存储 MenuItem
对象以便我可以匹配反对那个。
有什么想法吗?这通常是如何完成的?
如果 MenuItem
和 EmojiButton
继承自 UIView
,您可以使用 tag
属性 所有 UIView
]的。
您首先需要为每个 MenuItem
分配一个唯一的 tag
值。
然后您需要将相同的值分配给相应的表情符号按钮的 tag
属性。 (这对你的工厂来说是一件好事。)
完成后,您可以按如下方式修改函数:
//assumes MenuItem and EmojiButton inherit from UIView
func buttonFor(for menuItem: MenuItem) -> EmojiButton? {
return stackView.viewWithTag(menuItem.tag) as? EmojiButton
}
我想知道跟踪同一类型的不同对象的好的解决方案是什么。
我有这个功能:
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
中的内容创建的。
我正在寻找一个好的和干净的解决方案,如何根据 MenuItem
.
stackView
数组中查找和删除特定按钮
到目前为止我有三个想法:
- 要创建一个新对象,使用与要删除的对象相同的值进行初始化,然后使用
==
进行匹配。 (上面的解决方案)。这没有用。 - 给所有按钮添加一个
id
,然后给MenuItem
对象添加一个对应的id
。但这似乎不是一个优雅的解决方案,必须在任何地方添加它,并从按钮对象中公开这个变量。 - 也许可以将按钮存储在包装器 class(如
MenuItemButton
)中,并匹配id
,或者存储MenuItem
对象以便我可以匹配反对那个。
有什么想法吗?这通常是如何完成的?
如果 MenuItem
和 EmojiButton
继承自 UIView
,您可以使用 tag
属性 所有 UIView
]的。
您首先需要为每个 MenuItem
分配一个唯一的 tag
值。
然后您需要将相同的值分配给相应的表情符号按钮的 tag
属性。 (这对你的工厂来说是一件好事。)
完成后,您可以按如下方式修改函数:
//assumes MenuItem and EmojiButton inherit from UIView
func buttonFor(for menuItem: MenuItem) -> EmojiButton? {
return stackView.viewWithTag(menuItem.tag) as? EmojiButton
}