2016-01-06 110 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

看看更新後的問題,看看我是否做得對,以及如何擺脫錯誤? :)如果是這樣,你已經回答了這個問題! :) –