Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用标签按颜色匹配两个图像阵列_Ios_Swift_Swift3 - Fatal编程技术网

Ios 用标签按颜色匹配两个图像阵列

Ios 用标签按颜色匹配两个图像阵列,ios,swift,swift3,Ios,Swift,Swift3,我有两个UIImageView数组,我用18个块和圆填充它们 var myBlocks = [UIImageView]() var myCircles = [UIImageView]() 因此,当我以一种很好的方式将我的圆圈添加到屏幕上,然后我的块覆盖了它们之后,我调用一个函数来设置圆圈和块的标记以匹配,如果颜色匹配的话。意思是如果块是鲜红色,我想找到鲜红色的圆,并将它们都标记为0,依此类推。我设置标记的下面这一行抛出了错误: 无法使用“UIImageView”类型的索引为“[UIImageV

我有两个UIImageView数组,我用18个块和圆填充它们

var myBlocks = [UIImageView]()
var myCircles = [UIImageView]()
因此,当我以一种很好的方式将我的圆圈添加到屏幕上,然后我的块覆盖了它们之后,我调用一个函数来设置圆圈和块的标记以匹配,如果颜色匹配的话。意思是如果块是鲜红色,我想找到鲜红色的圆,并将它们都标记为0,依此类推。我设置标记的下面这一行抛出了错误:

无法使用“UIImageView”类型的索引为“[UIImageView]”类型的值下标

有没有更简单的方法?我之所以不在创建时同时标记这两个圆圈,是因为这些圆圈是使用一个随机排列的数组创建的,因为当游戏加载时,我不希望相同颜色的圆圈和相同的色块彼此重叠

编辑:我把它改为x.tag=y.tag,看起来更好。然而,当我点击一个方块时,我现在正在打印两个

 let objectDragging = recognizer.view?.tag
 print(objectDragging)

 //and

 print("the tag of the object your touching is \(myBlocks[objectDragging!])")
我在使用过程中得到的日志是

Optional(13)
the tag of the object your touching is <UIImageView: 0x7f8d4ba103a0;
frame = (263 180; 100 100); opaque = NO; tintColor = 
UIExtendedSRGBColorSpace 0.8 0.3 0.3 1; tag = 11; gestureRecognizers = <NSArray: 0x60000005fec0>; layer = <CALayer: 0x600000220580>>
可选(13)
您触摸的对象的标签是
所以一个是说这个区块被标记为13,一个是说11。当我打印myBlocks[count].tag时,13就是它所说的,我只是不知道在myBlocks[objectdraging]语句中11是从哪里来的

编辑2:是否因为(myBlocks[ObjectDraging!])引用了不同的块?

此行:

myBlocks[x].tag = y  //Error here
y
myCircles
的元素。它不是
标记

将该行更改为:

x.tag = y.tag

你有两个问题。首先,
myBlocks[x]
将引发一个错误,因为您正在通过元素而不是索引进行循环。其次,
x.tag=y
引发一个错误,因为属性和您正在尝试分配一个
UIImageView

for x in myBlocks {
   for y in myCircles {
      if x.tintColor == y.tintColor {
         x.tag = y.tag  //fix here
      }
   }
}
编辑:或者,如果要循环索引:

for x in 0..<myBlocks.count {
   for y in 0..<myCircles.count {
      if myBlocks[x].tintColor == myCircles[y].tintColor {
         myBlocks[x].tag = myCircles[y].tag
      }
   }
}

myBlocks[x].tag=y将此行更改为x.tag=y.tag在编辑中,
让ObjectDraging
是与识别器视图的标记相对应的整数(Int)。但是不能保证
myBlocks[ObjectDraging]
中的对象具有相同的标记,除非您已按这种方式对其进行排序。只需复制前面的注释即可。@matt您为什么这么认为?我已加载此页面并在xcode中运行示例,然后返回此页面并回答问题!不读评论。好啊我将编辑我的原始帖子,并在添加该帖子后添加我的问题。虽然效果更好。谢谢你。
for x in 0..<myBlocks.count {
   for y in 0..<myCircles.count {
      if myBlocks[x].tintColor == myCircles[y].tintColor {
         myBlocks[x].tag = myCircles[y].tag
      }
   }
}
for (x, block) in myBlocks.enumerated() {
   for (y, circle) in myCircles.enumerated() {
      if block.tintColor == circle.tintColor {
         myBlocks[x].tag = myCircles[y].tag
      }
   }
}