2016-11-12 5 views
3

私はディスクにファイルを書きますが、自分のコードをSwift 3に変換中です。何かにぶつかってしまいました。誰かが私に正しい方向へのプッシュを与えることができるかどうかを見たいと思った。Swiftの安全でないバイト3

私の現在のコードブロックは次のとおりです。

open let text: NSString 
data = possibleData ?? Data() 
open let fileURL: URL? 
open let fileEncoding: String.Encoding? 
fileprivate let data: Data! 

text = NSString(bytesNoCopy: UnsafeMutableRawPointer(mutating: data.bytes.bindMemory(to: Void.self, capacity: data.count)), length: data.count, encoding: encoding.rawValue, freeWhenDone: false)! 

スウィフトはdata.bytesの呼び出しは使用できないことを言うと、私が代わりに.unsafebytesを使用する必要があることです。

data.withUnsafeMutableBytes {(bytes: UnsafeMutablePointer<UInt8>)->Void in 
      //work with bytes in here 
     } 
:私は、だから私は少し研究を行なったし、一部の人々は、このような閉鎖ブロックを使用するように言ってきた

(それは危険なバイトにバイトを切り替えるように単純ではありません)あなたが危険なバイトを呼び出す方法を把握していません

私の問題は、上記のコードを動作させるためにクロージャブロック内に何を入れればよいのでしょうか?私は基本的に何かが欠けていると思う。同じエラーが再び発生するため、バイトを使用できません。

誰もが考えている?ありがとう! 、あなたはNSStringを使用したい理由を私は知らない、

let text = data.withUnsafeMutableBytes { bytes in 
    return NSString(bytesNoCopy: bytes, length: data.count, encoding: encoding.rawValue, freeWhenDone: false)! 
} 

または:

+0

の可能性のある重複[「バイト」を使用できません。代わりにwithUnsafeBytesを使用する](http://stackoverflow.com/questions/38979575/bytes-is-unavailable-use-withunsafebytes-instead) –

+2

あなたが実際にどのようなものです達成しようとしている?文字列をデータに、またはその逆に変換しますか?文字列やデータをファイルに書き込む?何が与えられ、何が計算されるのですか? –

+0

申し訳ありませんが、これは以前の開発者が使用した「Swiftache」の一部でした。私はちょうどそれをアップグレードし、私は今良いありがとう! – NullHypothesis

答えて

2

本当にこのパターンを使用する必要がある場合は、datavarなくletたと仮定すると、あなたのような何かを行うことができますあなたが行うことができます:(?危険なポインタではなく、様々な安全なパターンを使用して、なぜ、なぜ強制的にキャストなど?)

let text = data.withUnsafeMutableBytes { bytes in 
    return String(bytesNoCopy: bytes, length: data.count, encoding: encoding, freeWhenDone: false)! 
} 

を率直に言って、この全体のパターンが壊れやすいようです。これをファイルに書いているのであれば、なぜDataを直接書くのではないでしょうか?

do { 
    try data.write(to: fileURL) 
} catch { 
    print("Error: \(error.localizedDescription)") 
} 
+0

ありがとう、このコードはSwifache(サードパーティライブラリ)の一部であることが判明しました。私は最新のものをダウンロードした。私は完全にこのファイルが破られた方法のb/cを転記し、また前の開発者がコメントを削除したb/cを見逃していました。しかし、おかげさまで、あなたは私が(全体的なコードの形式に疑問を呈して)それを理解するのを手伝ってくれました。 – NullHypothesis

関連する問題