web-dev-qa-db-ja.com

タイプ「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」に準拠していません

このメナスは何ですか?

私を助けることができる人、たくさんありがとう!!!!

23
chris wang

Appleは Swiftプログラミング言語

For-inループは、範囲、シーケンス、コレクション、または進行の各アイテムに対して一連のステートメントを実行します。

現時点では、directoryContentはプロトコルAnyObjectに準拠しているだけなので、ループのforを使用することはできません。そうしたい場合は、次のようなことをする必要があります。

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

contentsOfDirectoryAtPathNSArrayを返しますが、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)!
4
Antonio