1. ホーム
  2. ios

[解決済み] SwiftでNSDocumentDirectoryを見つけるには?

2022-04-24 06:20:10

質問

ドキュメントフォルダへのパスをコードで取得しようとしています。

var documentsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory:0,NSSearchPathDomainMask:0,true)

が、Xcodeでエラーになる。 Cannot convert expression's type 'AnyObject[]!' to type 'NSSearchPathDirectory'

コードのどこが間違っているのか理解しようとしています。

どのように解決するのですか?

どうやら、コンパイラは NSSearchPathDirectory:0 は配列であり,当然ながら NSSearchPathDirectory ではなく 確かに、親切なエラーメッセージではありませんね。

しかし、その理由については

まず、引数の名前と型を混同しています。関数の定義を見てみましょう。

func NSSearchPathForDirectoriesInDomains(
    directory: NSSearchPathDirectory,
    domainMask: NSSearchPathDomainMask,
    expandTilde: Bool) -> AnyObject[]!

  • directorydomainMask が名前だとすると、型を使っていることになりますが、とにかく関数の場合は省くべきでしょう。これらは主にメソッドで使用されます。
  • また、Swiftは強く型付けされているので、0だけではダメで、enumの値を代わりに使います。
  • そして最後に、単一のパスだけでなく、配列を返します。

ということで、(Swift 2.0用にアップデートされた)ものが残りました。

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

とSwift 3用です。

let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]