簡體   English   中英

類型'AnyObject'不符合協議'SequenceType'

[英]Type 'AnyObject' does not conform to protocol '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'

這個menas是什么?

誰可以幫助我,很多!!!!

Apple在Swift編程語言中表示

for-in循環為范圍,序列,集合或進展中的每個項執行一組語句。

現在, directoryContent只是符合協議AnyObject ,所以你不能在它上面使用for循環。 如果你想這樣做,你必須做類似以下的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM