2016-05-23 8 views
5

मैं पाश के लिए एक बनाने के लिए कोशिश कर रहा हूँ, लेकिन समझने के लिए इस त्रुटि से छुटकारा पाने के लिए कैसे नहीं कर पा रहेद्विआधारी ऑपरेटर '.. <' के प्रकार 'इंट' और ऑपरेंड के लिए लागू नहीं किया जा सकता 'CGFloat'

मेरे कोड:

for i:CGFloat in 0 ..< 2 + self.frame.size.width/(movingGroundTexture.size().width) { 
     let sprite = SKSpriteNode(texture: movingGroundTexture) 
     sprite.zPosition = 0 
     sprite.anchorPoint = CGPointMake(0, 0) 
     sprite.position = CGPointMake(i * sprite.size.width, 0) 
     addChild(sprite) 
    } 

त्रुटि (movingGroundTexture.aize().width)

+2

जहां तक ​​मुझे पता है कि आधे खुले रेंज ऑपरेटर (.. <) गैर-पूर्णांक मानों के साथ काम नहीं करते हैं। – vadian

उत्तर

10

आप चल बिन्दु प्रकार के साथ एक CountableRange (या CountableClosedRange) नहीं बना सकते।

आप या तो परिवर्तित करना चाहते हैं अपने 2 + self.frame.size.width/movingGroundTexture.size().width एक Int रहे हैं:

for i in 0 ..< Int(2 + self.frame.size.width/movingGroundTexture.size().width) { 
    // i is an Int  
} 

या आप stride (स्विफ्ट 2 सिंटेक्स) का उपयोग करना चाहते:

for i in CGFloat(0).stride(to: 2 + self.frame.size.width/movingGroundTexture.size().width, by: 1) { 
    // i is a CGFloat 
} 

स्विफ्ट 3 वाक्य रचना:

for i in stride(from: 0, to: 2 + self.frame.size.width/movingGroundTexture.size().width, by: 1) { 
    // i is a CGFloat 
} 

इस पर निर्भर करता है कि आपको फ़्लोटिंग पॉइंट परिशुद्धता की आवश्यकता है या नहीं। ध्यान दें कि यदि आपकी ऊपरी सीमा एक गैर-अभिन्न मान है, तो stride संस्करण श्रेणी ऑपरेटर संस्करण की तुलना में एक और बार फिर से शुरू होगा, इस तथ्य के कारण कि Int(...) आंशिक घटक को अनदेखा कर देगा।

5

आप Int या UInt की तरह, एक पूर्णांक प्रकार के रेंज के दाईं ओर कन्वर्ट करना होगा forself.frame.size.width पर लाइन और पर है:

for i in 0 ..< Int(2 + self.frame.size.width/(movingGroundTexture.size().width)) { 
    ... 
} 
संबंधित मुद्दे

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