iOS8, Swift: fileURLWithPath - отсутствует аргумент для ошибки параметра

Я пытаюсь добавить подкаталог в каталог документов, используя метод:

class func fileURLWithPath(path: String) -> NSURL?`

код:

let applicationDocumentsDirectory:String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let storesDirectory:NSURL = NSURL.fileURLWithPath(applicationDocumentsDirectory).URLByAppendingPathComponent("Stores")

Получение ошибки

отсутствует аргумент для параметра 'isDirectory' в вызове.

Я действительно не понимаю, почему компилятор требует этот параметр? Это не упоминается в интерфейсе?

Спасибо заранее

1 ответ

Решение

Проблема в том, что вы пытаетесь связать методы, когда в цепочке есть дополнительные опции.

NSURL.fileURLWithPath(applicationDocumentsDirectory) возвращается NSURL? тип. При попытке выполнить метод URLByAppendingPathComponent на нем это выдает ошибку компилятора.

Я знаю, что отстойно, что ошибка компилятора совершенно не связана с реальной причиной, но это просто прелесть текущей версии Swift.

использование ! развернуть и все заработает нормально:

let storesDirectory:NSURL = 
NSURL.fileURLWithPath(applicationDocumentsDirectory)!
     .URLByAppendingPathComponent(NFConstants.NFCoreDataStringIdentifiers.CoreDataStoresPathComponent.rawValue)

Конечно, принудительная распаковка опционально может привести к сбою, так что даже лучше использовать if let идиома:

if let baseUrl = NSURL.fileURLWithPath(applicationDocumentsDirectory) {
    let storeURL = baseUrl.URLByAppendingPathComponent(NFConstants.NFCoreDataStringIdentifiers.CoreDataStoresPathComponent.rawValue)
}
Другие вопросы по тегам