28
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」に準拠していません

このメナスは何ですか?

誰が私を助けることができますか、どうもありがとう!!!!

4

2 に答える 2

50

Apple はThe Swift Programming Languageで次のように述べています。

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

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

for item in directoryContent as [AnyObject] {
    //Do stuff
}
于 2014-08-29T07:48:53.310 に答える
5

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)!
于 2014-08-29T07:53:25.517 に答える