2016-09-02 7 views
1

最新のベータ版のxcodeを更新しましたが、そのような問題がありました。私のコードは、Objective-Cでうまく働いていた前 は:あまりにも、すべてが良いですが、ここで種類の「任意」の種類を「UnsafeMutablePointer <Int16>」に変換する方法

let pointers = UnsafeMutablePointer<Int16>(((params["Pointers"] as AnyObject).pointerValue)!) 

short * pointers = (short *)[[params valueForKey:@"Pointers"] pointerValue]; 

は、それから私は、迅速な言語のコードの一部を翻訳しました。 But this code is not working on the Swift 3。あなたは迅速に実装する方法を教えてください3.ありがとう!

+0

NSValueにキャストしてみなければなりませんあなたの場合

if let ptr = value.pointerValue { let u16ptr = ptr.assumingMemoryBound(to: UInt16.self) // ... } else { // pointer is nil } 

です'(params [" Pointers "]をNSValueとして).pointerValue' –

+0

@LeoDabusは答えに感謝します。エラー:「 'UnsafeMutablePointer 'のイニシャライザを '(UnsafeMutableRawPointer)'型の引数リストで呼び出すことはできません。 – Feanon

+1

@LeoDabusはdataA = unsafeBitCast(パラメータ["Pointers"]を!NSValue).pointerValueに、UnsafeMutablePointer .self)。Working!:)助けてくれてありがとうございます – Feanon

答えて

1

スウィフト3にUnsafeMutablePointer<Int16>NSValue に包まれてUInt16へのポインタを変換する正しい方法は、それが

if let ptr = (params["Pointers"] as? NSValue)?.pointerValue { 
    let u16ptr = ptr.assumingMemoryBound(to: UInt16.self) 
    // ... 
} else { 
    // value does not exist, is not an `NSValue`, or pointer is nil 
} 
+0

私はあなたのコードを使いました! – Feanon

関連する問題