类型'AnyObject'不符合协议'SequenceType'

chr*_*ang 25 xcode for-loop swift xcode6-beta6

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译错误如下:

类型'AnyObject'不符合协议'SequenceType'

这个menas是什么?

谁可以帮助我,很多!!!!

Ima*_*tit 49

Apple在Swift编程语言中表示:

for-in循环为范围,序列,集合或进展中的每个项执行一组语句.

现在,directoryContent只是符合协议AnyObject,所以你不能使用for循环.如果你想这样做,你必须做类似以下的事情:

for item in directoryContent as [AnyObject] {
    //Do stuff
}
Run Code Online (Sandbox Code Playgroud)


Ant*_*nio 5

contentsOfDirectoryAtPath返回NSArray,而您将其强制转换为AnyObject。解决方案是将其强制转换为[AnyObject]?NSArray

let directoryContent: [AnyObject]? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)
Run Code Online (Sandbox Code Playgroud)

要么

let directoryContent: NSArray? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)
Run Code Online (Sandbox Code Playgroud)

然后在for循环之前使用可选绑定:

if let directoryContent = directoryContent {
    for item:AnyObject in directoryContent {
Run Code Online (Sandbox Code Playgroud)

查看contentsOfDirectoryAtPath文档,它指出它总是返回一个数组-因此上述内容可以简化为将返回值展开为swift或objc数组,而无需使用可选绑定:

let directoryContent: [AnyObject] = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!
Run Code Online (Sandbox Code Playgroud)

要么

let directoryContent: NSArray = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)!
Run Code Online (Sandbox Code Playgroud)