使用UIImageViews的if语句

时间:2016-01-06 16:02:28

标签: swift uiimageview uiimage

我已经创建了一个UIImagesViews数组,我已经制作了一个代码来为它们分配随机图片。如果超过或者5张图片显示相同的图片,我想做一个if语句。

var images: [UIImageView] = [Image1, Image2, Image3, Image4, Image5, Image6, Image7, Image8, Image9]

不同的图片名为card1, card2, card3

let firstRandomNumber = arc4random_uniform(3) + 1
    let firstRandomString:String = String(format: "card%i", firstRandomNumber)

    self.Image1.image = UIImage(named: firstRandomString)

    let secondRandomNumber = arc4random_uniform(3) + 1
    let secondRandomString:String = String(format: "card%i", secondRandomNumber)

    self.Image2.image = UIImage(named: secondRandomString)

所有图片都有自己的特定代码,如上所示。现在,正如我所说,如果五张或更多张图片显示相同的图片,我想提出if - 陈述或switch - 案例。

编辑:这是更新的代码;

let imageNames:NSArray = [firstRandomString, secondRandomString, thirdRandomString, fourthRandomString, fifthRandomString, sixthRandomString, seventhRandomString, eighthRandomString, ninthRandomString]

    let maxRepeating = imageNames
        .map {img in imageNames.reduce(0) { $1 == img ? $0 + 1 : $0} }
        .reduce(0){ $1 > $0 ? $1 : $0 }

代码在.map {img in imageNames.reduce(0) { $1 == img ? $0 + 1 : $0} }说只有一个错误;

  

二元运算符'=='不能应用于两个'Element'(又名'AnyObject')操作数

编辑:这是我从克里斯托弗凯文尝试的另一个代码;

var correct = 0

func checkImageDuplication() {
        let imageArray : NSArray = [firstRandomString, secondRandomString, thirdRandomString, fourthRandomString, fifthRandomString, sixthRandomString, seventhRandomString, eighthRandomString, ninthRandomString]
        let imageDataArray = imageArray.map { (image) -> NSData in
            return UIImagePNGRepresentation(image as! UIImage)!
        }

        let countSet = NSCountedSet(array: imageDataArray)
        for imageData in imageDataArray {
            let count = countSet.countForObject(imageData)
            if count > 5 {
                correct = 5
            }
        }
    }

@IBAction func PlayerPRESSED(sender: AnyObject) {
    if correct == 5 {
        view.backgroundColor = UIColor.greenColor()
    }
}

我尝试了代码,但它不会执行操作。 (view.backgroundColor)任何人都有任何想法这个代码有什么问题吗?

2 个答案:

答案 0 :(得分:0)

这里的逻辑需要与视图分开。

在包含UIImage数组的同一个类中创建模型。使用此阵列填充卡片,并检查是否有超过5张图像相同。示例未经测试和未经优化的代码:

var images = [UIImage]() 

private func populateImages() {
  // Fill images array, and perhaps populate imageViews
}

private func checkImageDuplication() {
  let imageDataArray = imageArray.map { (image) -> NSData in
    return UIImagePNGRepresentation(image)!
  }

  let countSet = NSCountedSet(array: imageDataArray)
  for imageData in imageDataArray {
      let count = countSet.countForObject(imageData)
      if count > 5 {
          // Handle here
      }
  }
}

答案 1 :(得分:0)

我认为您无法比较UIImage个对象,因为每次调用UIImage(named:)都会生成另一个UIImage实例,即使名称相同也是如此。我建议生成一个字符串数组,并测试该数组是否重复,如下所示:

let maxRepeating = imageNames
    .map {img in imageNames.reduce(0) {  $1 == img ? $0 + 1 : $0} }
    .reduce(0){ $1 > $0 ? $1 : $0 }