Подтвердить что ты не робот

Тип "AnyObject" не соответствует протоколу "SequenceType"

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
        }
    }
}

ошибка компиляции ниже:

Тип "AnyObject" не соответствует протоколу "SequenceType"

что это означает?

кто может мне помочь, много!!!!

4b9b3361

Ответ 1

Apple заявляет в Язык быстрого программирования:

Цикл for-in выполняет набор операторов для каждого элемента в диапазоне, последовательности, коллекции или прогрессии.

Прямо сейчас directoryContent просто соответствует протоколу AnyObject, поэтому вы не можете использовать для него петли. Если вы хотите сделать это, вам нужно сделать что-то похожее на следующее:

for item in directoryContent as [AnyObject] {
    //Do stuff
}

Ответ 2

contentsOfDirectoryAtPath возвращает NSArray, тогда как вы отбрасываете его на AnyObject. Решение состоит в том, чтобы передать его либо в [AnyObject]?, либо NSArray:

let directoryContent: [AnyObject]? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)

или

let directoryContent: NSArray? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)

Затем используйте опциональную привязку перед циклом for:

if let directoryContent = directoryContent {
    for item:AnyObject in directoryContent {

Глядя на документацию contentsOfDirectoryAtPath, она заявляет, что она всегда возвращает массив - так что сказанное выше может быть уменьшено до разворачивания возвращаемого значения в массив быстрого или objc, без необходимости использования необязательной привязки:

let directoryContent: [AnyObject] = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!

или

let directoryContent: NSArray = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!