2016-04-01 40 views
2

我具有以下Objective-C代碼:轉換[NSFileWrapper initDirectoryWithFileWrappers]至夫特

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

我試圖上述代碼轉換爲夫特:

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

最後一行不能被編譯。我收到錯誤消息說

無法轉換價值型「的NSMutableDictionary」預期參數類型的「[字符串:NSFileWrapper]」

我不知道是什麼[String : NSFileWrapper]類型,一個列表?無論如何將包裝轉換爲這種類型?

回答

4

NSFileWrapper初始化已經改變採取以迅速字典而非NSDictionary

public class NSFileWrapper : NSObject, NSCoding { 

    // .... 

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

    // .... 
} 

[String : NSFileWrapper]爲字典其中String是關鍵的類型和NSFileWrapper夫特語法的值的類型爲那個關鍵。

只需使用斯威夫特類型:

斯威夫特3:

FileWrapper(directoryWithFileWrappers: [:]) 

斯威夫特2.X:

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

不多點聲明常數一個空的字典文字。只要做FileWrapper(directoryWithFileWrappers:[:])(NS在Swift 3中被刪除) – Ash

+0

@Ash謝謝你這是一個用Swift 2.x編寫的與提問者相匹配的舊答案。更新了Swift 3的答案。 – JAL