【问题标题】:Cannot use "find()" method with an array of type UIView不能对 UIView 类型的数组使用“find()”方法
【发布时间】:2014-08-19 18:48:50
【问题描述】:

当我尝试使用此方法时,编译器显示下一个错误:“类型'UIView'不符合协议'IntegerLiteralConvertible'”

if find(_views, 1) {

}

【问题讨论】:

  • 如果_viewsUIView 的数组,那么将1 作为第二个参数传递是没有意义的。
  • 我认为第二个参数是要检查的数组的索引。但我现在看到它不是。还是谢谢。
  • 你想找到什么?
  • 如果指定索引处的元素不为空。我目前正在使用这里建议的扩展:stackoverflow.com/questions/24102024/… 但我认为“find()”方法会更好。但显然我不知道它是如何工作的。

标签: arrays swift


【解决方案1】:

那个方法签名是:

find(domain: C, value: C.Generator.Element) -> C.Index?

C 是一个类型化数组,C.Generator.Element 是该数组中元素的类型,C.Index? 是一个可选项,它将包含找到该元素的索引(如果有的话)。

所以你得到的错误是因为它查看你的数组UIView 中的实例并试图将它们与1 进行比较,这是一个IntegerLiteral。而且UIView 不是IntegerLiteralConvertible,因为将视图转换为整数是没有意义的。

所以find 将返回可以在这些实例的数组中找到某些实例的索引。

var strings: [String] = ["A", "B", "C"]
find(strings, "C")! // 2

但您似乎不想要索引。 if find(views, 1) 似乎向我表明您要检查索引 1 是否存在于数组中。如果这确实是您想要的,您可以通过检查计数非常简单地做到这一点。

if _views.count > 1 {
  println("index 1 exists in this array")
}

【讨论】:

  • 谢谢,很有帮助!
猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2019-12-01
相关资源
最近更新 更多