post Image
【Swift】URLでパスを扱うときに便利なプロパティとメソッド

NSStringかURLか、それが問題だ

iOSでファイルを扱うためには、パスを扱う必要があります。
NSStringにはパスを扱うための便利なプロパティやメソッドがたくさんあるので、それらを使っていたら「iOSでのファイル操作はNSStringではなくURLでするほうがいいよ」と会社の人が教えてくれたので調べてみました。

Apple パフォーマンスのヒントによると、以下のような理由でURLを使ったほうがいいようです。

パスオブジェクトを再利用します。NSURLオブジェクトに関してファイルリソースにアクセスしている場合(resourceValuesForKeys(_:)メソッドを使用)、それらの値はキャッシュされます。NSURLオブジェクトを再利用すると、以降は、それらのファイルリソースにアクセスするためのファイルシステムへのアクセスを回避できる場合があります。また、NSURLオブジェクトの構築はコスト高になる場合があるので、ファイルを参照するたびに新しいインスタンスを作成するよりも、再利用する方法を選びます。

文字列を使ってパスを指定するルーチンよりも、NSURLオブジェクトを使ってパスを指定できるルーチンを選択してください。macOS 10.6以降では大半のURLベースのルーチンがサポートされ、Grand Central Dispatchなどのテクノロジーを利用できるように設計されています。このため、多くの介入を必要とせずに、コード内で即座にマルチコアコンピュータの効果を実現できます。

ファイル操作用のパスをあつかうときに便利そうなプロパティとメソッド

そういうことならURLをつかおうと思って、URLでパスを扱う方法を調べてみました。

NSStringに実装しているパスを扱うプロパティやメソッドは、URLにも実装されているみたいです。今回はそのなかから、パスを扱うときに便利そうなプロパティとメソッドを集めてみました。

以下に、Playgroundでの実行結果を貼っています。

    let path = "https://nanka-url/"
    let directory = "image"
    let imageName = "sample"
    let imageExtension = "jpg"

 // 文字列をURLに変換
    let urlPath = URL(fileURLWithPath: path)
    print("\(urlPath)") // https:/nanka-url

 // URLにディレクトリを追加(isDirectoryをtrueにした場合。falseにすると末尾に/がつかない)
    let urlDirectory = urlPath.appendingPathComponent(directory, isDirectory: true)
    print("\(urlDirectory)") //https:/nanka-url/image/

 // URLにファイル名を追加
    let urlImageName = urlDirectory.appendingPathComponent(imageName)
    print("\(urlImageName)") // https:/nanka-url/image/sample

 // URLのファイル名に拡張子を追加
    let urlExtension = urlImageName.appendingPathExtension(imageExtension)
    print("\(urlExtension)") // https:/nanka-url/image/sample.jpg

 // URLのファイル名の拡張子を削除
    let urlDeleteExtension = urlExtension.deletingPathExtension()
    print("\(urlDeleteExtension)") // https:/nanka-url/image/sample

 // URLの最後の項目を削除
    let urlDeleteLastPath = urlDeleteExtension.deletingLastPathComponent()
    print("\(urlDeleteLastPath)") // https:/nanka-url/image/

 // URLの最後の項目名を取得
    let fileName = urlExtension.lastPathComponent
    print("\(fileName)") // sample.jpg

 // URLの最後の項目の拡張子を取得
    let fileExtension = urlExtension.pathExtension
    print("\(fileExtension)") // jpg

 // URLの各項目を配列で取得
    let component = urlExtension.pathComponents
    print("\(component)") // ["/", "nanka-url", "image", "sample.jpg"]

これだけたくさんあれば、URLの扱いには困らなさそうです。

ほかにもいろいろとあるので、気になるかたは、Apple URLをご覧ください。


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。