2014-11-27 8 views
22

यहां मेरा कोड। मैं दो मानों को CGRectMake(..) और गुजरने और त्रुटि में गुजर रहा हूं।Int32 मान को CGFloat में तेज़ी से कैसे परिवर्तित करें?

let width = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width 
// return Int32 value 

let height = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height 
// return Int32 value 

myLayer?.frame = CGRectMake(0, 0, width, height) 
// returns error: '`Int32`' not convertible to `CGFloat` 

मैं कैसे Int32CGFloat में बदल सकते हैं एक त्रुटि वापस नहीं लिए?

उत्तर

51

संख्यात्मक डेटा प्रकार के बीच बदलने के लिए, लक्ष्य प्रकार का एक नया उदाहरण बनाने के पैरामीटर के रूप में स्रोत मान गुजर। तो कन्वर्ट करने के लिए एक Int32 एक CGFloat रहे हैं:

let int: Int32 = 10 
let cgfloat = CGFloat(int) 

आपके मामले में आप या तो कर सकते हैं:

let width = CGFloat(CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width) 
let height = CGFloat(CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height) 

myLayer?.frame = CGRectMake(0, 0, width, height) 

या:

let width = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width 
let height = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height 

myLayer?.frame = CGRectMake(0, 0, CGFloat(width), CGFloat(height)) 

नोट कोई अस्पष्ट या स्पष्ट प्रकार कास्टिंग है कि वहाँ संख्यात्मक प्रकारों के बीच तेज़ी से, इसलिए आपको Int से Int32 यामें परिवर्तित करने के लिए एक ही पैटर्न का उपयोग करना होगा 210 आदि

+1

धन्यवाद यह ठीक काम कर रहा है! – iosLearner

+0

मुझे आश्चर्य है, 32-बिट सिस्टम पर यह रूपांतरण करना सुरक्षित है, जहां 'int32' (अभी भी) 32 बिट्स है, हालांकि 'CGFloat' 32 बिट्स भी है। इस बात को ध्यान में रखते हुए कि बाद वाला एक फ़्लोटिंग पॉइंट है और [यह उत्तर] (http://stackoverflow.com/a/30260843/1492173), सटीकता का नुकसान होगा। मुझे सही जवाब दो अगर मैं गलत हूँ। –

2

बस स्पष्ट रूप से CGFloat करने के लिए width और height परिवर्तित CGFloat's प्रारंभकर्ता का उपयोग कर:

myLayer?.frame = CGRectMake(0, 0, CGFloat(width), CGFloat(height)) 
संबंधित मुद्दे