func loadThumbnails() {
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDirectory:NSString = paths[0] as NSString
var error:NSError?
let fileManager = NSFileManager()
let directoryContent:AnyObject = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!
thumbnails = [QSPhotoInfo]()
for item:AnyObject in directoryContent {
let fileName = item as NSString
if fileName.hasPrefix(kThumbnailImagePrefix) {
let image = loadImageFromDocumentsDirectory(fileName)
var photoInfo = QSPhotoInfo()
photoInfo.thumbnail = image;
photoInfo.thumbnailFileName = fileName
thumbnails += photoInfo
}
}
}
l'erreur de compilation est ci-dessous:
Le type 'AnyObject' n'est pas conforme au protocole 'SequenceType'
qu'est-ce que cela menas?
qui peut m'aider, merci beaucoup !!!!
Apple déclare dans Le Swift :
La boucle for-in effectue un ensemble d'instructions pour chaque élément dans une plage, une séquence, une collection ou une progression.
Pour l'instant, directoryContent
est juste conforme au protocole AnyObject
, vous ne pouvez donc pas l'utiliser pour les boucles. Si vous le souhaitez, vous devez faire quelque chose de similaire à ce qui suit:
for item in directoryContent as [AnyObject] {
//Do stuff
}
contentsOfDirectoryAtPath
renvoie un NSArray
, tandis que vous le transformez en AnyObject
. La solution consiste à le convertir en [AnyObject]?
ou NSArray
:
let directoryContent: [AnyObject]? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)
ou
let directoryContent: NSArray? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)
Utilisez ensuite une liaison facultative avant la boucle for:
if let directoryContent = directoryContent {
for item:AnyObject in directoryContent {
En regardant la documentation contentsOfDirectoryAtPath
, il indique qu'il retourne toujours un tableau - donc ce qui a été dit ci-dessus peut être réduit à déballer la valeur de retour en un Swift ou tableau objc, sans aucun besoin d'utiliser la liaison facultative:
let directoryContent: [AnyObject] = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!
ou
let directoryContent: NSArray = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!