CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero अनुपलब्ध अनुपलब्ध है


242

कोड को नवीनतम स्विफ्ट 3.0 में परिवर्तित करने के बाद मुझे यह त्रुटि दिखाई गई है।

यहां छवि विवरण दर्ज करेंयहां छवि विवरण दर्ज करें

इसके लिए उपाय भी बताएं CGSize = CGSizeMake(0,0)

static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero

जो अनुपलब्ध भी है।


लेकिन मेरे पिछले कोड को स्विफ्ट 3 में परिवर्तित करने के बाद मुझे यह मुद्दा मिला, यह जानना चाहूंगा कि क्या अद्यतन संस्करण में सिंटैक्स में कोई बदलाव है
niravdesai21

जवाबों:


493

CGRectबस CGPointया CGSizeतो दिए गए उदाहरण का उपयोग करके बनाया जा सकता है , नीचे दिए गए हैं।

let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: 100, height: 100))  

// Or

let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))

या फिर हम में प्रत्येक मान निर्दिष्ट करना चाहते हैं CGFloatया Doubleया Int, हम इस विधि का उपयोग कर सकते हैं।

let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int

CGPoint इस तरह बनाया जा सकता है।

 let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int

CGSize इस तरह बनाया जा सकता है।

let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int

मान के रूप में भी आकार और बिंदु 0 के साथ, यह इस तरह किया जा सकता है।

let size = CGSize.zero // width = 0, height = 0
let point = CGPoint.zero // x = 0, y = 0, equal to CGPointZero
let rect = CGRect.zero // equal to CGRectZero

CGRectZeroऔर CGPointZeroके साथ बदल दिया CGRect.zeroऔर CGPoint.zeroमें Swift 3.0


क्या आप मुझे CGSize = CGSizeMake (0,0) के लिए समाधान बता सकते हैं जो कि स्विफ्ट 3 में नहीं जा रहा है
niravdesai21

@ niravdesai21 अपडेट किया गया सवाल, कृपया देखें।

CGPointZero और CGRectZero भी उसके लिए कोई समाधान उपलब्ध नहीं है? अपडेटेड प्रश्न कृपया उत्तर अपडेट करें
niravdesai21

@ niravdesai21 अपडेट किया गया।

4
"CGRectZero स्विफ्ट में अनुपलब्ध है" जब वास्तव में यह CGRect.zero के लिए एक वाक्यविन्यास परिवर्तन है तो यह एक मजाक है! इन लोगों को बड़े समय पर अपने संकलित चेतावनियों पर काम करने की जरूरत है ... वे लगातार बाहर निकलने के लिए स्टैक ओवरफ्लो पर भरोसा करते हैं
मैगू

49

स्विफ्ट 3 और iOS10 में CGRectMake, CGPointMake, CGSizeMake के लिए त्वरित सुधार

ये एक्सटेंशन जोड़ें:

extension CGRect{
    init(_ x:CGFloat,_ y:CGFloat,_ width:CGFloat,_ height:CGFloat) {
        self.init(x:x,y:y,width:width,height:height)
    }

}
extension CGSize{
    init(_ width:CGFloat,_ height:CGFloat) {
        self.init(width:width,height:height)
    }
}
extension CGPoint{
    init(_ x:CGFloat,_ y:CGFloat) {
        self.init(x:x,y:y)
    }
}

फिर " खोजें और कार्यस्थान में बदलें " CGRectMake, CGPointMake, CGSizeMake पर जाएं और उन्हें CGRect, CGPoint, CGSize से बदलें

ये चरण शायद हर समय बचा रहे क्योंकि Xcode अभी हमें Swift 2+ से Swift 3 में त्वरित रूपांतरण नहीं देता है


शानदार समाधान!
ओप्रिमस

@ ऑप्रिमस को उम्मीद है कि इससे आपकी परेशानी कम हो जाएगी :)
रफत तौकीर रफसुन

26

स्विफ्ट 3 में, आप बस का उपयोग कर सकते CGPoint.zeroया CGRect.zeroके स्थान पर CGRectZeroया CGPointZero

हालांकि, स्विफ्ट 4 में, CGRect.zeroऔर 'CGPoint.zero'काम करेगा


1
@ChewieTheChorkie आप सही "केवल" शब्द बनाया भ्रम है जिसे मैंने हटा दिया है।
गुरु

12

यदि आप उन्हें स्विफ्ट 2 के रूप में उपयोग करना चाहते हैं, तो आप इन फ़न का उपयोग कर सकते हैं:

CGRectMake के लिए:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}

CGPointMake के लिए:

func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
    return CGPoint(x: x, y: y)
}

CGSizeMake के लिए:

func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
    return CGSize(width: width, height: height)
}

बस उन्हें किसी भी वर्ग के बाहर रखना चाहिए और यह काम करना चाहिए। (कम से कम मेरे लिए काम करता है)


9

कोर ग्राफिक्स और अन्य एपीआई में संरचनाओं के साथ-साथ अन्य सभी प्रतीक क्लीनर बन गए हैं और इसमें पैरामीटर नाम भी शामिल हैं। https://developer.apple.com/reference/coregraphics#symbols

CGRect(x: Int, y: Int, width: Int, height: Int)
CGVector(dx: Int, dy: Int)
CGPoint(x: Double, y: Double)
CGSize(width: Int, height: Int)

CGPoint उदाहरण:

let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)

CGVector उदाहरण:

self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)

CGSize उदाहरण:

hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))

CGRect उदाहरण:

let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)

Apple ब्लॉग

स्विफ्ट 3 में स्विफ्ट सिंटैक्स और एपीआई का नाम बदलने से भाषा अधिक स्वाभाविक लगती है, और कोको फ्रेमवर्क को कॉल करते समय एक और भी अधिक स्विफ्ट-वाई अनुभव प्रदान करता है। लोकप्रिय रूपरेखा कोर ग्राफिक्स और ग्रैंड सेंट्रल डिस्पैच में स्विफ्ट में नए, बहुत क्लीनर इंटरफेस हैं।


5

निम्नलिखित आज़माएँ:

var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))

यह स्विफ्ट के नवीनतम संस्करण के लिए है


यह (वाई) की तरह, यह ऑटो पूरा करने के लिए आसान होगा
हुसाम

5

स्विफ्ट 3 बोनस: किसी ने भी शॉर्ट फॉर्म का उल्लेख क्यों नहीं किया?

CGRect(origin: .zero, size: size)

.zero के बजाय CGPoint.zero

जब प्रकार परिभाषित किया जाता है, तो आप इसे सुरक्षित रूप से छोड़ सकते हैं।


2

आप CGRectZero के प्रतिस्थापन के साथ इसका उपयोग कर सकते हैं

CGRect.zero

0

स्विफ्ट 4 में यह नीचे की तरह काम करता है

collectionView.setContentOffset(CGPoint.zero, animated: true)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.