web-dev-qa-db-ja.com

Swiftでファイルを開くにはどうすればよいですか?

Swift標準ライブラリのドキュメントはまだ見ていません。ここでは、Fileクラスや、ファイルを開いたり、読んだり、書き込んだりするためのインターフェースを持つ構造体を見つけることが期待されています。通常のすべてのものファイルIOを期待しています。それはありますか、それともNSFileManagerとそのilkに依存しますか?

15
theory

Swift標準ライブラリには、この機能は含まれていません。標準ライブラリには、主にデータ構造、低レベルの型と呼び出し、およびセミビルトイン言語機能が含まれています。print()readLine()はスコープ外と見なされますが、近い将来にこれが変更されることはあまりありません。

ただし、FoundationにはファイルI/O呼び出しが含まれており、Swift CorelibsプロジェクトはFoundationを純粋に再実装するために懸命に取り組んでいますSwiftしたがって、どこでも利用可能ですSwiftです。すべての主要なオペレーティングシステムで使用可能なPOSIX I/O呼び出しは、Swiftでも使用できますが、使用するのがはるかに扱いにくいです。

4

これがファイルがiOSプロジェクトにある場合に行う方法です(これがあなたの状況であることを期待しています)。

var filePath = Bundle.main.path(forResource: "theFile", ofType: "txt")
var data     = Data(contentsOf: URL(fileURLWithPath: filePath))
14
Jean Le Moignan

ファイルの内容を文字列に読み込むだけの場合は、Swift 2.0を使用する方法は次のとおりです。

do {
    var dictionary = try String(contentsOfFile: "/usr/share/dict/words", encoding: NSUTF8StringEncoding)
} catch {

}

それ以外の場合は、上記のより複雑な方法が機能します。

6
user5434378

多くの場合、アプリではファイルを保存するためにUIDocumentやその他のiCloudリンク方法を使用しますが、Swift blog AppleはCおよびPOSIXに基づく例を使用しています ファイルを保存するため、1つの例では次のようになります。

let fd = open("/tmp/scratch.txt", O_WRONLY|O_CREAT, 0o666)

if fd < 0 {
    perror("could not open /tmp/scratch.txt")
} else {
    let text = "Hello World"
    write(fd, text, text.characters.count)
    close(fd)
}

そしてそれは非常にSwiftのように見えますが、Cocoaフレームワークの上でこれを使いたいかどうかはわかりません。

5
sketchyTech

この時点での唯一の有効な答えは次のとおりだと思います。Swiftベースのファイル/ IOライブラリがないため、今のところObjective-CベースのFoundationクラスを使用する必要があります。 @BryanChenが言うように、多分1年後に戻って、より具体的なSwift標準ライブラリを見つけます。

1
theory