2014-06-04 8 views
8

में सी स्टाइल हस्ताक्षरित चार सरणी और बिटवाई ऑपरेटरों का उपयोग करके मैं कुछ उद्देश्य-सी कोड को स्विफ्ट पर बदलने पर काम कर रहा हूं, और मैं अपने जीवन के बारे में नहीं समझ सकता कि कैसे हस्ताक्षरित चार सरणी और बिटवाई ऑपरेशंस का ख्याल रखना है कोड के इस विशिष्ट उदाहरण में।स्विफ्ट

विशेष रूप से, मैं स्विफ्ट के लिए निम्न ऑब्जेक्टिव-सी कोड (जो CoreBluetooth के साथ संबंधित) में परिवर्तित करने पर काम कर रहा हूँ:

var advertisementBytes: CMutablePointer<CUnsignedChar> 
self.proximityUUID.getUUIDBytes(advertisementBytes) 
advertisementBytes[16] = (CUnsignedChar)(self.major >> 8) 

:

unsigned char advertisementBytes[21] = {0}; 
[self.proximityUUID getUUIDBytes:(unsigned char *)&advertisementBytes]; 
advertisementBytes[16] = (unsigned char)(self.major >> 8); 
advertisementBytes[17] = (unsigned char)(self.major & 255); 

मैं स्विफ्ट में निम्नलिखित की कोशिश की है जिन समस्याओं में मैं चल रहा हूं वे हैं कि स्विफ्ट में getUUIDBytes केवल CMutablePointer<CUnsignedChar> ऑब्जेक्ट को CUnsignedChars की सरणी के बजाय तर्क के रूप में लेते हैं, इसलिए मुझे नहीं पता कि विज्ञापन बाइट्स पर बाद के बिटवाई ऑपरेशंस कैसे करें, जैसा कि ऐसा लगता है एक हस्ताक्षरित होने की आवश्यकता है ऐसा करने के लिए ar सरणी।

इसके अतिरिक्त, CMutablePointer<CUnsignedChar[21]> एक त्रुटि फेंकता है कि स्विफ्ट में सीएमयूटेबल पॉइंटर्स में निश्चित लंबाई सरणी समर्थित नहीं हैं।

क्या कोई भी संभावित कार्य-आसपास या समाधान पर सलाह दे सकता है? बहुत धन्यवाद।

उत्तर

7

ज्यादातर यह

सी परिवर्त्य प्वाइंटर

एक समारोह एक CMutablePointer तर्क लेने के रूप में घोषित किया जाता है, यह निम्न में से किसी को स्वीकार कर सकते Interacting with C APIs

पर एक नज़र डालें:

  • शून्य, जो एक शून्य सूचक
  • के रूप में पारित किया जाता है
  • एक CMutablePointer मूल्य
  • में बाहर
  • कोई व्यंजक जिसका संकार्य के प्रकार प्रकार एक संग्रहीत lvalue है, जो lvalue में बाहर
  • एक प्रकार [] मूल्य के पते, जो के रूप में पारित हो जाता है के रूप में पारित हो जाता है सरणी के शुरू करने के लिए एक सूचक है, और कॉल

की अवधि के लिए जीवन भर-बढ़ाया आप एक समारोह इस तरह की घोषणा की है:

स्विफ्ट

func takesAMutablePointer(x: CMutablePointer<Float>) { /*...*/ } You 

निम्न तरीकों में से किसी में यह कॉल कर सकते हैं:

स्विफ्ट

var x: Float = 0.0 
var p: CMutablePointer<Float> = nil 
var a: Float[] = [1.0, 2.0, 3.0] 
takesAMutablePointer(nil) 
takesAMutablePointer(p) 
takesAMutablePointer(&x) 
takesAMutablePointer(&a) 

तो तुम कोड

var advertisementBytes = CUnsignedChar[]() 
self.proximityUUID.getUUIDBytes(&advertisementBytes) 
advertisementBytes[16] = CUnsignedChar(self.major >> 8) 
+0

आप 'ऑब्जेक्टिव-C' शामिल किया जा सका हो जाता है संस्करण भी? –