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」に準拠していません
このメナスは何ですか?
私を助けることができる人、たくさんありがとう!!!!
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)!