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 数组中查找和删除特定按钮

到目前为止我有三个想法:

有什么想法吗?这通常是如何完成的?

如果 MenuItemEmojiButton 继承自 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
}