2016-10-12 24 views
2

main.swiftファイルには、受領確認システム(Receigenによって生成)があります。スウィフト2では、main.swiftを読む:UnsafeMutablePointer to expected argument type UnsafeMutablePointer <_> Swift 3

startup(Process.argc, UnsafeMutablePointer<UnsafePointer<Int8>>(Process.unsafeArgv)) 

スウィフト3にアップグレードした後、私が持っている限り:

Cannot convert value of type UnsafeMutablePointer<UnsafeMutablePointer<Int8>?> (aka UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) to expected argument type UnsafeMutablePointer<_>

更新:使用

startup(CommandLine.argc, UnsafeMutablePointer<UnsafePointer<Int8>>(CommandLine.unsafeArgv)) 

がエラーを示していますlinked questionとなります。

startup(CommandLine.argc, UnsafeMutableRawPointer(CommandLine.unsafeArgv) 
    .bindMemory(
     to: UnsafeMutablePointer<Int8>.self, 
     capacity: Int(CommandLine.argc))) 

が生成されます

コンパイラは to:UnsafeMutablePointerを参照している

Cannot convert value of type UnsafeMutablePointer<Int8>.Type to expected argument type UnsafePointer<Int8>?.Type (aka Optional<UnsafePointer<Int8>>.Type)

を。

int startup(int argc, const char * argv[]); 

どのように私は成功しmain.swiftで起動するために変数を渡すことができます。

スタートアップのためのヘッダは次のようになりますか?

+0

http://stackoverflow.com/a/39089634/341994 – matt

+0

私は質問を書く前にそれを試しました(正直!)が、私はまだ同じエラーが発生します。 – glenstorey

+0

申し訳ありませんが、 "試した"場合、UnsafeMutableRawPointerはどこですか?私はそれを見ない。 – matt

答えて

5

基本的に、これは、ここで議論し、問題の変異体である:

Xcode 8 beta 6: main.swift won't compile

問題は、あなたがCommandLine.unsafeArgvの種類とあなたのCの関数が期待タイプ間のインピーダンス不整合を有することです。また、ある種のポインタ型から別のポインタ型に強制するだけで、もはやこの不一致をキャストすることはできません。代わりに、bindMemoryを呼び出すことによって、1つのタイプから別のタイプにピボットする必要があります。あなたがコンパイルできるようにする必要があり

startup(
     CommandLine.argc, 
     UnsafeMutableRawPointer(CommandLine.unsafeArgv) 
      .bindMemory(
       to: Optional<UnsafePointer<Int8>>.self, 
       capacity: Int(CommandLine.argc)) 
    ) 

:とエラーメッセージが、Optional<UnsafePointer<Int8>>.Typeを要求、あなたはどのようなタイプに旋回するように指示します。スタブがstartupのマシンでテストすると、実際に実行されます。しかし、それがあなたのマシン上で実行されるかどうか、それが安全かどうかは誰でも推測されます!このことは間違いなく誇りに思っています...

+0

ありがとうございます - 私はそれが明らかだとわかりますが、それは私の経験の方法です。あなたは怒りを言う時、あなたはテスト/ QAの観点から話していますか? – glenstorey

+1

私は「私はこれについて心を包むことができず、どうして私はそれをやるべきかわからない」と話しています。:)事実は、あなたがつかめるための馬鹿にしたAPIを与えられているということです、そして、今あなたは立ち往生しています...あなたはレセゲンの人々に不平を言うべきです。 – matt

+0

真剣に、迅速なAPIよりもベースCの方が簡単なのはなぜですか? – NSGangster

関連する問題