xcode - switch - Tipo ''AnyObject'' no se ajusta al protocolo ''SequenceType''
switch en swift 3 (2)
Apple afirma en The Swift Programming Language :
El bucle for-in realiza un conjunto de instrucciones para cada elemento en un rango, secuencia, colección o progresión.
En este momento, directoryContent
solo se ajusta al protocolo AnyObject
, por lo que no se puede usar para bucles sobre él. Si desea hacerlo, debe hacer algo similar a lo siguiente:
for item in directoryContent as [AnyObject] {
//Do stuff
}
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
}
}
}
el error de compilación está a continuación:
Tipo ''AnyObject'' no se ajusta al protocolo ''SequenceType''
¿Qué significa esto?
¿Quién puede ayudarme, eso mucho?
contentsOfDirectoryAtPath
devuelve un NSArray
, mientras que lo está AnyObject
a AnyObject
. La solución es [AnyObject]?
a cualquiera de [AnyObject]?
o NSArray
:
let directoryContent: [AnyObject]? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)
o
let directoryContent: NSArray? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)
Luego use un enlace opcional antes del ciclo for:
if let directoryContent = directoryContent {
for item:AnyObject in directoryContent {
Al observar la documentación de contentsOfDirectoryAtPath
, indica que siempre devuelve una matriz, por lo que lo que se ha dicho anteriormente puede reducirse a desenvolver el valor de retorno en una matriz rápida u objc, sin necesidad de utilizar la vinculación opcional:
let directoryContent: [AnyObject] = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!
o
let directoryContent: NSArray = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!