Тип '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'
что это менас?
кто может мне помочь, большое спасибо!!!!
2 ответа
Apple заявляет на языке программирования Swift:
Цикл for-in выполняет набор операторов для каждого элемента в диапазоне, последовательности, коллекции или последовательности.
Прямо сейчас, directoryContent
просто соответствует протоколу AnyObject
, так что вы не можете использовать для циклов над ним. Если вы хотите сделать это, вы должны сделать что-то похожее на следующее:
for item in directoryContent as [AnyObject] {
//Do stuff
}
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
В документации говорится, что он всегда возвращает массив - поэтому сказанное выше может быть сведено к развертыванию возвращаемого значения в массиве swift или objc без необходимости использования необязательной привязки:
let directoryContent: [AnyObject] = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!
или же
let directoryContent: NSArray = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!