gpt4 book ai didi

arrays - Swift - 检查 Array 是否包含 UIColor

转载 作者:行者123 更新时间:2023-11-28 11:04:54 33 4
gpt4 key购买 nike

我遇到了一个小问题,我用谷歌搜索了几个小时,但找不到解决方案。

我将多种类型的值存储在一个数组中——通常是 String 和 UIColor。在我的一个函数中,我需要检查另一个数组是否包含某个字符串或 UIColor。我永远不知道它是否包含一个对象或另一个对象或两者。我下面的方法总是只提取字符串,但从未找到 UIColor,即使我 100% 确定它在那里。即使“打印”显示颜色存在,但它总是被忽略。

请问如何正确检查数组是否包含 UIColor?

// roundItem comes from Array<AnyObject> and reads: UIDeviceRGBColorSpace 0.160784 0.501961 0.72549 1
let btnInfo: Array<AnyObject> = dict["btn\(key)"]!

if ((btnInfo as NSArray).containsObject(roundItem as AnyObject)) {

correctAnswer += 1
}

如果字符串匹配,上面的代码将递增计数,但如果颜色根据“打印”匹配,则不会递增,控制台打印:

btnInfo: [UIDeviceRGBColorSpace 0.160784 0.501961 0.72549 1]

roundItem: UIDeviceRGBColorSpace 0.160784 0.501961 0.72549 1

我尝试了另一个版本,但它崩溃了:

     for item in (btnInfo as NSArray) {

if item is UIColor {

print("is UIColor")

if ((roundItem as! UIColor).isEqual( item as! UIColor)){
correctAnswer += 1
}
}
else if item is String{

print("is String")

if roundItem as! String == item as! String{
correctAnswer += 1
}
}
}

控制台打印:

无法将类型“__NSCFString”(0x10fa332c8)的值转换为“UIColor”(0x11167a268)。

我尝试使用 Equatable 进行扩展,但它也与 AnyObject 一起崩溃。

如何比较存储的 UIColors 或如何将 UIDeviceRGBColorSpace 转换为另一种格式?

最佳答案

给定一个这样的数组

let list:[AnyObject] = ["Hello", UIColor.whiteColor(), 123, UIColor.redColor()]

包含

您可以检查 list 是否包含给定的颜色

let result = list.contains { ($0 as? UIColor) == UIColor.whiteColor() }

颜色

您可以提取颜色并将它们放入 UIColor(s) 数组中

let colors = list.flatMap { $0 as? UIColor }

[UIDeviceWhiteColorSpace 1 1, UIDeviceRGBColorSpace 1 0 0 1]

颜色索引

您还可以提取颜色索引并将它们放入 Int(s) 数组中

let colorIndexes = list.enumerate().filter { $0.element is UIColor }.map { $0.index }

[1, 3]

不是颜色

最后,您还可以检索不是 颜色的元素,并将它们放入AnyObject(s) 数组中

let notColors = list.filter { !($0 is UIColor) }

谢谢@dfri

[Hello, 123]

关于arrays - Swift - 检查 Array<AnyObject> 是否包含 UIColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38414165/

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