while switch statement loop for ciclo xcode for-loop swift xcode6-beta6

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)!