Тип "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"
что это означает?
кто может мне помочь, много!!!!
Ответы
Ответ 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)!