Подтвердить что ты не робот

Что такое эквивалент Swift 3 NSURL.URLByAppendingPathComponent()?

Я следую базовому учебнику по созданию простого приложения iOS в Swift.

Он написан в Swift 2.x, и я работаю с XCode 8 Beta и Swift 3.

В учебнике предлагается использовать NSFileManager для поиска каталога данных. Имена классов изменились, поэтому автоматически зафиксированный Swift 3 выглядит следующим образом:

static let DocumentsDirectory = FileManager().urlsForDirectory(.documentDirectory, inDomains:.userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals")

Однако Xcode теперь жалуется, что

Value of type 'URL' has no member 'URLByAddingPathComponent'

Я не могу узнать, как теперь вызывается метод.

Ссылка на класс NSURL не содержит никаких подсказок о том, как обращаться с Swift 3

  • Что такое имя нового метода?

  • Где мне нужно найти полную ссылку на класс для Swift 3 (или интерфейс Swift 3 для библиотеки, в которой определяется класс URL - я до сих пор не совсем понимаю номенклатуру) так что я могу исследовать их сам в будущем?

4b9b3361

Ответ 1

Как и в Xcode 8 beta 4, он называется appendingPathComponent(_:) и не бросает.

static let archiveURL = documentsDirectory.appendingPathComponent("meals")

Также как указывает Лев Дабус в комментариях, ваше свойство documentsDirectory нуждается в изменении, чтобы использовать urls(for:in:) в бета-версии 4:

static let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

(Обратите внимание, что я сделал ваши имена свойств lowerCamelCase в соответствии с рекомендациями по разработке Swift API. рекомендуется использовать FileManager.default, а не создавать новый экземпляр.)

Вы можете взглянуть на справочное руководство Apple по последнему API, чтобы увидеть изменения именования API, которые произошли в Swift 3.

Ответ 2

Теперь он изменился на appendingPathComponent(_:), и он выбрасывается, поэтому вам нужно обернуть его в блок do-catch

do {
  let archiveURL = try documentsDirectory?.appendingPathComponent("meals")
} catch {
  print(error)
}

Обновление

В соответствии с Xcode 8 beta 4 appendingPathComponent(_:) не выдает ошибки.

Для получения дополнительной информации см. ответ @Hamish

Ответ 3

func appendingPathComponent(String)

= > Возвращает новый URL-адрес, добавленный компонентом пути к исходному URL-адресу.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals")

Если это каталог:

func appendingPathComponent(String, isDirectory: Bool)

= > Возвращает новый URL-адрес, созданный путем добавления компонента пути к исходному URL-адресу вместе с завершающим косой чертой, если компонент обозначен как каталог.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals", isDirectory: true)