2014-08-29 17 views
22
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 
     } 
    } 
} 

lỗi biên dịch là dưới đây:Loại 'AnyObject' không phù hợp với giao thức 'SequenceType'

Loại 'AnyObject' không phù hợp với giao thức 'SequenceType'

những gì hiện Menas này?

người có thể giúp tôi, thks rất nhiều !!!!

Trả lời

42

bang Apple trong The Swift Programming Language:

Các phi trong vòng lặp thực hiện một tập hợp các báo cáo cho từng hạng mục trong một dãy, chuỗi, bộ sưu tập, hoặc tiến triển.

Ngay bây giờ, directoryContent chỉ phù hợp với giao thức AnyObject, vì vậy bạn không thể sử dụng cho các vòng trên đó. Nếu bạn muốn làm như vậy, bạn phải làm một cái gì đó tương tự như sau:

for item in directoryContent as [AnyObject] { 
    //Do stuff 
} 
+0

Thks rất nhiều, nâng cấp từ beta3 để beta6, xuất hiện nhiều biên dịch error.it mới dường như dự án nhiều github cần phải xây dựng lại cho xcode-beta6 , lời khuyên nào tốt cho tôi? –

+0

tốt nhất, làm việc cho tôi trong Swift 2 – Naishta

4

contentsOfDirectoryAtPath trả về một NSArray, trong khi bạn đang đúc nó để AnyObject. Giải pháp là để đúc nó vào một trong hai [AnyObject]? hoặc NSArray:

let directoryContent: [AnyObject]? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error) 

hoặc

let directoryContent: NSArray? = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error) 

Sau đó sử dụng một ràng buộc bắt buộc trước khi vòng lặp for:

if let directoryContent = directoryContent { 
    for item:AnyObject in directoryContent { 

Nhìn vào các tài liệu contentsOfDirectoryAtPath, nó nói nó luôn luôn trả về một mảng - vì vậy những gì đã nói ở trên có thể được giảm xuống để mở khóa giá trị trả về cho một mảng nhanh hoặc objc, với Không cần phải sử dụng các tùy chọn ràng buộc:

let directoryContent: [AnyObject] = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)! 

hoặc

let directoryContent: NSArray = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: &error)! 
Các vấn đề liên quan