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)
}