gpt4 book ai didi

ios - 有没有 "tag"通讯员?

转载 作者:搜寻专家 更新时间:2023-10-31 22:46:03 25 4
gpt4 key购买 nike

我想知道是否还有诸如标签之类的东西?

我已经在我的图像上使用了标签,但我必须使用多个标签来创建我的代码,我还没有找到一种方法...因此我想知道是否还有其他事情可以类似于标签?另一种“标记”图像的方法?

(image.tag = 1) ---> 标签示例。

最佳答案

您可以构建一个单例类来跟踪 UIImage 和标签之间的关系。

class TaggedImages {
static let sharedInstance = TaggedImages()
private var dict = [Int:Set<UIImage>]()
private init() { }

func add(tag:Int, to image:UIImage) {
var set = dict[tag] ?? Set<UIImage>()
set.insert(image)
dict[tag] = set
}

func remove(tag:Int, to image:UIImage) {
var set = dict[tag] ?? Set<UIImage>()
set.remove(image)
dict[tag] = set
}

func images(with tag: Int) -> [UIImage] {
guard let set = dict[tag] else { return [] }
return Array(set)
}

func tags(by image: UIImage) -> [Int] {
return dict.filter { $0.1.contains(image) }.map { $0.0 }
}
}

如您所见,此类包含一个字典,其中键是 Int(标记),值是 UIImage(s) 的 Set

现在我们可以

  • 将一组图像与给定标签相关联。
  • 并且每个图像都可以关联到数量可变的标签。

扩展 UIImage

接下来让我们给 UIImage 添加 4 个方法

extension UIImage {
func add(tag:Int) {
TaggedImages.sharedInstance.add(tag, to: self)
}

func remove(tag:Int) {
TaggedImages.sharedInstance.remove(tag, to: self)
}

var tags: [Int] {
return TaggedImages.sharedInstance.tags(by: self)
}

func has(tag tag:Int) -> Bool {
return self.tags.contains(tag)
}
}

在前面的扩展中定义的所有方法都使用 TaggedImages 共享实例来:

  1. 保存当前图片与标签的关系
  2. 删除关系图像标签
  3. 检索与当前图像关联的所有标签

如何使用

let sky = UIImage()
sky.add(tag: 1)
sky.add(tag: 2)
sky.add(tag: 3)
sky.tags // [2, 3, 1]

sky.has(tag: 1) // true
sky.has(tag: 2) // true
sky.has(tag: 100) // false

sky.remove(tag:1)
sky.has(tag: 1) // false

sky.remove(tag:1)
sky.has(tag: 1) // false
sky.tags // [2,3]

关于ios - 有没有 "tag"通讯员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37898164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com