2014-06-10 7 views
6

Ich versuche, ein NSDirectoryEnumerator-Objekt aus der NSFileManager-Methode enumeratorAtUrl zurückzugeben. Dies führt zu einem Compiler-Fehler: Cannot convert the expressions type 'NSDirectoryEnumerator!' to type 'NSDirectoryEnumeratorOptions'Problem mit dem Zurückgeben eines Directory Enumerator von NSFileManager using EnumeratorAtUrl in Swift

let url:NSURL = NSURL(fileURLWithPath: "/") 
var keys:Array<AnyObject> = [NSURLNameKey, NSURLIsDirectoryKey] 
var manager:NSFileManager = NSFileManager.defaultManager() 
let enumerator:NSDirectoryEnumerator = manager.enumeratorAtURL(url,includingPropertiesForKeys: keys, options: 0, errorHandler: nil) 

Dies funktioniert in Obj-C, aber nicht Swift .. Hat jemand dieses Problem gestoßen?

+0

Hinweis: normalerweise eine NSDirectoryEnumerator über die enumeratorAtPath Methode funktioniert immer noch zurück. –

Antwort

9

Try this:

let enumerator:NSDirectoryEnumerator = manager.enumeratorAtURL(url, includingPropertiesForKeys: keys, options: NSDirectoryEnumerationOptions(), errorHandler: nil) 

Oder kurz gesagt, passieren in NSDirectoryEnumerationOptions() statt "0".

"0" ist nicht wirklich ein Mitglied der Enumeration, die es sucht.

1

@ Kendalls Antwort ist perfekt für die meisten Fälle, aber wenn Sie das Verhalten des Enumerators anpassen müssen, hier sind einige Beispiele.

den Enumerator konfigurieren, um versteckte Dateien überspringen:

let enumerator = manager.enumeratorAtURL(url, includingPropertiesForKeys: keys, options: .SkipsHiddenFiles, errorHandler: nil) 

Wenn Sie mehrere Optionen festlegen müssen, Sie "oder" sie zusammen:

let options: NSDirectoryEnumerationOptions = .SkipsHiddenFiles | .SkipsPackageDescendants 
let enumerator = manager.enumeratorAtURL(url, includingPropertiesForKeys: keys, options: options, errorHandler: nil) 
5

Swift 3.1+

let url = URL(fileURLWithPath: "/") 
let keys: [URLResourceKey] = [.nameKey, .isDirectoryKey] 
let manager = FileManager.default 
let options: FileManager.DirectoryEnumerationOptions = [.skipsHiddenFiles, .skipsPackageDescendants] 
let enumerator = manager.enumerator(at: url, includingPropertiesForKeys: keys, options: options, errorHandler: nil) 

Swift 2.0

Keine Optionen:

let enumerator = manager.enumeratorAtURL(url, includingPropertiesForKeys: keys, options: [], errorHandler: nil) 

Eine Option:

let enumerator = manager.enumeratorAtURL(url, includingPropertiesForKeys: keys, options: .SkipsHiddenFiles, errorHandler: nil) 

Mehrere Optionen:

let options: NSDirectoryEnumerationOptions = [.SkipsHiddenFiles, .SkipsPackageDescendants] 
let enumerator = manager.enumeratorAtURL(url, includingPropertiesForKeys: keys, options: options, errorHandler: nil) 
Verwandte Themen