2016-09-15 6 views
12

मैं निम्नलिखित कोड स्विफ्ट 2.2 में लिखा है:स्विफ्ट 3 में UnsafeMutablePointer का उपयोग कैसे करें?

let keyData = NSMutableData(length: 64)! 
SecRandomCopyBytes(kSecRandomDefault, 64, UnsafeMutablePointer<UInt8>(keyData.mutableBytes)) 

XCode 8 पर प्रकाश डाला है कि दूसरी पंक्ति और दावा है कि

प्रकार के लिए प्रारंभकर्ता आह्वान नहीं किया जा सकता 'UnsafeMutablePointer < _>' एक तर्क सूची के साथ प्रकार '(UnsafeMutableRawPointer)'

जबकि मैं एक्सकोड को यह कहने की सराहना करता हूं, मुझे समझ में नहीं आता कि UnsafeMutabl को कैसे बदला जाए स्वीकार्य होने के लिए eRawPointer।

क्या कोई यह जानता है कि इस कोड को स्विफ्ट 3 में कैसे परिवर्तित करें?

+0

मैं भी इस समस्या से मुलाकात की। क्या आपको अभी तक कोई समाधान मिला है? –

+0

डुप्लिकेट से बचने के लिए, यह मेरा प्रश्न है, जो आपके साथ बहुत समान है। आशा है कि कोई आपके प्रश्न का उत्तर आपके साथ दे सकता है। 'प्रकार' की एक तर्क सूची के साथ 'UnsafePointer <_>' प्रकार के लिए प्रारंभकर्ता का आह्वान नहीं कर सकता '(UnsafeMutableRawPointer?)' –

+0

OOper के उत्तर के अलावा, नहीं। क्या आपको अपने मामले में एनएसएमयूटेबलडेटा का उपयोग करना है? – AppreciateIt

उत्तर

16

मैं तुम्हें स्विफ्ट में Data बजाय NSData के साथ काम करने 3.

var keyData = Data(count: 64) 
let result = keyData.withUnsafeMutableBytes {mutableBytes in 
    SecRandomCopyBytes(kSecRandomDefault, keyData.count, mutableBytes) 
} 

withUnsafeMutableBytes(_:) एक सामान्य विधि के रूप में घोषित किया जाता है की सलाह देते हैं, तो इस जैसे सरल मामलों में, आप तत्व प्रकार निर्दिष्ट किए बिना उपयोग कर सकते हैं ।

+0

कृपया यह https://stackoverflow.com/questions/45181614/cannot-invoke-initializer-for-type-unsafepointer-with-an-argument-list-of-typ देखें –

संबंधित मुद्दे