2015-07-16 3 views
0

У меня есть переменная с именем downloadedPhotoURLs, которая имеет тип [NSURL]?.Ошибка с Swift 2: Невозможно присвоить значение типа '[NSURL]' значению типа '[NSURL]'

Я пытаюсь назначить результаты функции, которая возвращает тип [NSURL] (не факультативно).

Разверните переменную downloadedPhotoURLs! при назначении.

я получаю ошибку:

Cannot assign a value of type '[NSURL]' to a value of type '[NSURL]'

Я не вижу, как это исправить.

Я использую бета Xcode 7 (только потому, что я должен быть в состоянии запустить его на устройстве, но у меня есть бесплатный аккаунт)

do { 
    downloadedPhotoURLs! = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(directoryURL, includingPropertiesForKeys: nil, options: nil) 
    collectionView!.reloadData() 
} catch _ { 
    downloadedPhotoURLs = nil 
} 
+3

Избавьтесь от '!'. Просто назначьте 'dowloadedPhotoURLs = try ...'. – vacawama

+0

Не только это, но и опции: nil' не будут работать. Есть тег 'swift2', поэтому' OptionSetType' есть ... – robertvojta

ответ

1

Две проблемы там ...

Развертывание сил downloadedPhotoURLs!

Вы не можете назначить таким образом. Если тип переменной не является обязательным, вы присваиваете ему в общий путь, как если бы это не обязательно, ...

downloadedPhotoURLs = ... 

разворачивания (!, ...) используется, когда вы хотите значение чтения/доступа. Не когда вы хотите присвоить новое значение. Вы сделали это правильно на линии:

downloadedPhotoURLS = nil 

OptionSetType в Swift 2.0

Вы не можете пройти nil в options: аргумента. Подпись этого Митосе является:

func contentsOfDirectoryAtURL(url: NSURL, 
    includingPropertiesForKeys keys: [String]?, 
    options mask: NSDirectoryEnumerationOptions) throws -> [NSURL] 

И NSDirectoryEnumerationOptions является:

struct NSDirectoryEnumerationOptions : OptionSetType { 
    init(rawValue: UInt) 

    static var SkipsSubdirectoryDescendants: NSDirectoryEnumerationOptions { get }  
    static var SkipsPackageDescendants: NSDirectoryEnumerationOptions { get } 
    static var SkipsHiddenFiles: NSDirectoryEnumerationOptions { get } 
} 

Так оно и должно выглядеть следующим образом:

downloadedPhotoURLs = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(NSURL(string: "")!, 
    includingPropertiesForKeys: nil, 
    options:NSDirectoryEnumerationOptions(rawValue: 0)) 

Более подробную информацию о OptionSetType (введен с Swift 2.0).

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