2016-11-29 67 views
0

數組我試圖通過以下操作進行隨機UIImages數組:雨燕2.2:使用GKRandomSource與UIImages

import UIKit 
import GameplayKit 

//Create an array of the pictures. They are already in xcassets. 

var picturePieces = [UIImage(named: "concordTL"), 
        UIImage(named: "concordTC"), 
        UIImage(named: "concordTR"), 
        UIImage(named: "concordLC"), 
        UIImage(named: "concordC"), 
        UIImage(named: "concordRC"), 
        UIImage(named: "concordBL"), 
        UIImage(named: "concordBC"), 
        UIImage(named: "concordBR")] 

//Randomizer function using GKRandomSource 


func shuffle() { 
var shuffledPicturePieces = GKRandomSource.sharedRandom().arrayByShufflingObjectsInArray(picturePieces) 

這裏:我不斷收到錯誤「無法將類型的價值「[ (picturePieces)上的'UIImage?]'到期望的參數類型'[AnyObject]'「。

GKRandomSource可以不使用UIImage嗎?

然後我要分配每個shuffledPicturePieces每個我@IBOutlets的隨機UIImages的,如下圖所示:

//Outlets for ImageViews. 

@IBOutlet weak var EasyTopLeft: UIImageView! 

@IBOutlet weak var EasyTopCenter: UIImageView! 

@IBOutlet weak var EasyTopRight: UIImageView! 

@IBOutlet weak var EasyLeftCenter: UIImageView! 

@IBOutlet weak var EasyCenter: UIImageView! 

@IBOutlet weak var EasyRightCenter: UIImageView! 

@IBOutlet weak var EasyBottomLeft: UIImageView! 

@IBOutlet weak var EasyBottomCenter: UIImageView! 

@IBOutlet weak var EasyBottomRight: UIImageView! 

//Method to get a picture for the puzzle. 

@IBAction func getPictureButton(sender: UIButton) { 
    shuffle() 

    if EasyTopLeft == nil{ 
     EasyTopLeft.image = shuffledPicturePieces[Int[0]] 
     EasyTopCenter.image = shuffledPicturePieces[Int[1]] 
     EasyTopRight.image = shuffledPicturePieces[Int[2]] 
     EasyLeftCenter.image = shuffledPicturePieces[Int[3]] 
     EasyCenter.image = shuffledPicturePieces[Int[4]] 
     EasyRightCenter.image = shuffledPicturePieces[Int[5]] 
     EasyBottomLeft.image = shuffledPicturePieces[Int[6]] 
     EasyBottomCenter.image = shuffledPicturePieces[Int[7]] 
     EasyBottomRight.image = shuffledPicturePieces[Int[8]] 
    } 


    else{ 
     NSLog("Image already loaded!") 
    } 



} 

這裏:我不斷收到錯誤「使用未解決的標識符‘shuffledPicturePieces’ 「對於IF語句中的每個項目。

謝謝你的幫助!

-Frank

回答

0

你的第一個錯誤:

Cannot convert value of type '[UIImage?]' to expected argument type '[AnyObject]'

是因爲要傳遞可選類型的數組給需要非可選類型的數組功能。既然你「知道」這些圖像出現在您的資產目錄,一個簡單的方法,使他們不可選的是強制解開他們(注意添加!):

var picturePieces = [UIImage(named: "concordTL")!, 
        UIImage(named: "concordTC")!, 
        // ... 

或者,您可以更明確地處理錯誤用函數式編程風格:

let imageNames = ["concordTL", "concordTC", /*...*/] 
let picturePieces = imageNames.map { name in 
    guard let image = UIImage(named: name) 
     else { fatalError("missing from asset catalog: \(name)") } 
    return image 
} 

注意,一旦你有圖片([UIImage])的數組,你可以把它傳遞給GKRandomSource.arrayByShufflingObjectsInArray,但洗牌陣列丟失部件類型的信息 - 它的類型是[AnyObject]。把它當作像陣列再次,你需要一個轉換:

let shuffledPicturePieces = GKRandomSource.sharedRandom() 
    .arrayByShufflingObjectsInArray(picturePieces) as! [UIImage] 

你的第二個問題:

Use of unresolved identifier 'shuffledPicturePieces'

與範圍有關。您在shuffle()函數中定義了一個名爲shuffledPicturePieces的數組,因此該名稱僅在該函數中的其他位置有效。在另一個功能中,如getPictureButton,該名稱不存在。

如果您想shuffledPicturePieces全局存在(或在您的類的實例中),請改爲將其設置爲屬性。例如:

class Whatever { 
    let picturePieces = ["concordTL", /*...*/].map { /* as above */ } 
    var shuffledPicturePieces: [UIImage]! 
    func shuffle() { 
     shuffledPicturePieces = GKRandomSource.sharedRandom() 
      .arrayByShufflingObjectsInArray(picturePieces) as! [UIImage] 
     // notice no var or let here — assign to the instance property, 
     // don't create a new local variable 
    } 
    func getPictureButton(sender: UIButton) { 
     // as before 
    } 
} 

順便說一句,它可以幫助他人,調試,以及像堆棧溢出的語法高亮顯示,如果你使用標準雨燕命名約定的事情通訊:您@IBOutlet變量的名稱應該以一個較低的開始案件信(easyTopLeft等),所以他們不會誤認爲類型。