web-dev-qa-db-ja.com

NSURL.URLByAppendingPathComponent()に相当するSwift 3とは何ですか?

私は 基本的なチュートリアル に従って、Swiftで簡単なiOSアプリを作成しています。

これはSwift 2.xで書かれており、XCode 8ベータ版と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クラスはで定義されています-私はまだ命名法を完全に理解していません)ので、将来これらを自分で研究できますか?

26
Pekka 웃

Xcode 8ベータ4の時点では、名前は appendingPathComponent(_:) であり、スローされません。

_static let archiveURL = documentsDirectory.appendingPathComponent("meals")
_

また、 Leo Dabusがコメントで指摘している のように、documentsDirectoryプロパティは、ベータ4で urls(for:in:) を使用するように変更する必要があります。

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

Swift API設計ガイドライン に従って、プロパティ名をlowerCamelCaseにしたことに注意してください。新しいインスタンスを作成するのではなく、_FileManager.default_を使用することもお勧めします。 )

Appleの最新のAPIリファレンスガイド をご覧になり、Swift 3。

42
Hamish

これはappendingPathComponent(_:)に変更され、スローされるため、do-catchブロックでラップする必要があります。

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

更新

Xcode 8ベータ4によると、 appendingpathcomponent(_:) はエラーをスローしません。

関連情報については、 @ Hamish による回答をご覧ください

12
Khundragpan
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)
4