2016-04-01 1 views
2

Я следующий код Objective-C:Convert [NSFileWrapper initDirectoryWithFileWrappers] Свифта

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

Я попытался преобразовать выше кода Swift:

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

последняя строка не может быть скомпилирован. Я получил сообщение об ошибке сказав

Невозможно преобразовать тип значения «NSMutableDictionary» ожидаемого типа аргумента '[String: NSFileWrapper]

Я не уверен, что это тип [String : NSFileWrapper], список? Есть ли способ конвертировать обертки в этот тип?

ответ

4

NSFileWrapper инициализатор изменился взять в Swift словаря, а не NSDictionary:

public class NSFileWrapper : NSObject, NSCoding { 

    // .... 

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

    // .... 
} 

[String : NSFileWrapper] скор синтаксис для словаря, где String является типом ключа и NSFileWrapper является тип значения для этого ключа.

Просто используйте Swift типов:

Swift 3:

FileWrapper(directoryWithFileWrappers: [:]) 

Swift 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

 Смежные вопросы

  • Нет связанных вопросов^_^