2016-08-07 4 views
25

Я следую a basic tutorial по созданию простого приложения для iOS в Swift.Что такое Swift 3 эквивалент NSURL.URLByAppendingPathComponent()?

написано в 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 Class Reference не содержит никаких намеков о том, как обратиться из Swift 3

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

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

+2

Просто .appendingPathComponent ( –

+0

Взгляните на [новое 'ссылки класса NSURL'] (https://developer.apple.com/reference/foundation/nsurl) - это теперь' appendingPathComponent (_ :) ' – Hamish

+0

@Hamish argh, так что я искал неправильную ссылку на класс. Спасибо, я полагаю, я мог бы удалить это. (Edit: ah, теперь есть ответ. Вы хотите опубликовать свой собственный Хэмиш? В противном случае я отредактирую ссылку ссылки на ответ К.Нимо.) –

ответ

10

Он поменяется на appendingPathComponent(_:) и броски, так что вам нужно, чтобы обернуть его в делать - поймать блок

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

Update

В соответствии с Xcode 8 бета-4, appendingpathcomponent(_:) не бросайте ошибку.

Для соответствующей информации см ответа на @Hamish

39

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

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

Кроме того, как Leo Dabus points out in the comments, ваше documentsDirectory свойство будет нуждаться в изменении использовать urls(for:in:) в бета-4:.

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

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

Вы можете посмотреть Apple's latest API reference guide, чтобы увидеть изменения API присвоения имен, которые имели место в Swift 3.

4
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) 
Смежные вопросы