以下のメソッド/関数がそれ。
NSSearchPathForDirectoriesInDomains
第2引数は NSSearchPathDomainMask、
第3引数が BOOL
となる。
第1引数のNSSearchPathDirectoryはディレクトリの種類を定数で指定する。
定数はSwiftでは以下のように定義されている。
enum NSSearchPathDirectory : UInt { case ApplicationDirectory case DemoApplicationDirectory case DeveloperApplicationDirectory case AdminApplicationDirectory case LibraryDirectory case DeveloperDirectory case UserDirectory case DocumentationDirectory case DocumentDirectory
(後半略)
}
enum {
NSApplicationDirectory = 1,
NSDemoApplicationDirectory,
NSDeveloperApplicationDirectory,
NSAdminApplicationDirectory,
NSLibraryDirectory,
NSDeveloperDirectory,
NSUserDirectory,
NSDocumentationDirectory,
NSDocumentDirectory,
(後半略)
};
typedef NSUInteger NSSearchPathDirectory;
まあでもUIntって型指定されてるんで、実体は数値なんだろう。
んで、返り値が配列で返されるので、Swiftでは以下のように書く。
.DocumentDirectoryてのはさっきの定数。
列挙型なので先頭に「.」を付けて必要なのを指定してやる。
var ary = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
NSDocumentDirectory
とか書くわけね。
Objective-Cだと、クラスなんだか定数なんだかわかりづらいから、Swiftの方がわかりやすいかもね。慣れるまでは「あれ?」ってなるかもしれないけど。
第2引数のNSSearchPathDomainMaskでDocumentDirectory中のさらに別なディレクトリを指定してるんだと思う。
.UserDomainMask ってやればユーザーが書き込めるディレクトリが指定できる。
第3引数はよくわからんが、チルダ「~」を扱うためのものらしい。true(Objective-CならYES)でいいようだ。
返り値が配列なのは、おそらく同様なディレクトリが複数あった時にすべてを返すためだと思うが、だいたいは1個しかないだろうから、
var path = ary[0]
としてindex 0の値を使ってやればpathになるようだ。
0 件のコメント:
コメントを投稿