2016-01-06 102 views
0

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

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} }说;

二元运算符“==”不能被应用到两个“元素”(又名“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)任何人有任何想法这个代码有什么问题?

+0

显示您的代码。你到目前为止尝试了什么? – Wain

+0

张贴您的随机代码请 – Khuong

+0

@为什么我一直无法找出任何东西,想通过'if images == card1 && card1' - 5次,但它完全是愚蠢的... –

回答

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 
     } 
    } 
} 
+0

看起来像一个很好的答案,但什么和哪些Swift过滤器可以使用,以及如何? :) –

+0

事后看来,'UIImage'模型可能会让事情变得更加困难,因为如果不将它们转换为纯粹的NSData表示形式,就不能轻松进行比较。 如果你的模型是一个String的数组(值类型,所以它们可以直接比较),你可以使用'NSCountedSet'来获得所有的计数。 只需在'populateImages()'函数中将图像名称字符串添加到NSCountedSet中,然后遍历'checkImageDuplication()'中的所有计数。 –

+0

这意味着我必须为所有9种图像为所有三种不同类型的图片创建一个不同的字符串名称? –

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 } 
+0

如何创建这些字符串? (imageNames?) - 还是应该使用字符串'Image1'? –

+0

讨论中的字符串是传递给UIImage的字符串(命名:), – Cristik

+0

看看更新后的问题,看看我是否做得对,以及如何摆脱错误? :)如果是这样,你已经回答了这个问题! :) –