2016-04-01 8 views
2

Ich habe folgende Objective-C-Code:Convert [NSFileWrapper initDirectoryWithFileWrappers] zu Swift

NSFileWrapper* fileWrapper; 
NSMutableDictionary* wrappers = [NSMutableDictionary dictionary]; 
... 
fileWrapper = [[NSFileWrapper alloc] 
        initDirectoryWithFileWrappers:wrappers]; 

ich oben Code Swift zu konvertieren versucht:

var fileWrapper : NSFileWrapper? 
let wrappers = NSMutableDictionary(dictionary: [:]) 
.... 
fileWrapper = NSFileWrapper(directoryWithFileWrappers: wrappers) 

die letzte Zeile nicht kompiliert werden kann. Ich habe Nachricht Fehler sagen

Wert kann nicht Art von ‚NSMutableDictionary‘ zu erwarteten Argumenttyp '[String: NSFileWrapper] konvertieren

Ich bin nicht sicher, was Art von [String : NSFileWrapper], eine Liste? Gibt es überhaupt Wrapper um diesen Typ zu konvertieren?

Antwort

4

Die NSFileWrapper initializer wird in einem Swift-Wörterbuch nehmen geändert und nicht als NSDictionary:

public class NSFileWrapper : NSObject, NSCoding { 

    // .... 

    public init(directoryWithFileWrappers childrenByPreferredName: [String : NSFileWrapper]) 

    // .... 
} 

[String : NSFileWrapper] Swift-Syntax für einen Wörterbuch ist, wo String die Art des Schlüssels und NSFileWrapper wird der Typ des Wertes für diesen Schlüssel.

Verwenden Sie einfach Swift-Typen:

Swift 3:

FileWrapper(directoryWithFileWrappers: [:]) 

Swift 2.x:

var fileWrapper : NSFileWrapper? 
let wrappers: [String : NSFileWrapper] = [:] 
fileWrapper = NSFileWrapper(directoryWithFileWrappers: wrappers) 
+0

nicht viel Sinn, eine Konstante für ein leeres Wörterbuch wörtliche deklarieren. Mach einfach FileWrapper (directoryWithFileWrappers: [:]) (der NS wurde in Swift 3 entfernt) – Ash

+0

@Ash Danke, das war eine alte Antwort, die in Swift 2.x geschrieben wurde, um dem Fragesteller zu entsprechen. Die Antwort zu Swift 3 wurde aktualisiert. – JAL