2016-02-22 5 views
20

removal of the traditional C-style for-loop in Swift 3.0 के साथ, मैं निम्नलिखित कैसे कर सकता हूं?मैं एक चरण के साथ एक स्विफ्ट फॉर-इन लूप कैसे कर सकता हूं?

for i in range(1, max, 2): 
    # Do something 

लेकिन स्विफ्ट रेंज ऑपरेटर कोई समकक्ष है करने के लिए प्रकट होता है::

for i in 1..<max { 
    // Do something 
} 
+2

इसी प्रकार के प्रश्न: http://stackoverflow.com/questions/35032182/swift-c-style-loops-deprecated-decrement-index। –

+0

मैंने उसे नहीं देखा! मैंने पाया [यह] (http://stackoverflow.com/questions/32197250/using-stride-in-swift-2-0) जिसने मुझे मेरा जवाब दिया। जब मैं खोज रहा था (प्रश्न पूछने से पहले) मैं जिस कीवर्ड को खो रहा था, वह "चरण" था - मैं "चरण" शब्द का उपयोग कर रहा था और कोई उपयोगी परिणाम नहीं ढूंढ रहा था। फिर जब मुझे पता चला, तो मुझे एरिका सदून की [विषय पर पोस्ट] मिली (http://ericasadun.com/2015/05/21/swift-six-killer-features/) जो अब पुरानी है। –

उत्तर

59

स्विफ्ट

for (i = 1; i < max; i+=2) { 
    // Do something 
} 

अजगर में, नियंत्रण के लिए में प्रवाह विवरण एक वैकल्पिक चरण महत्व है "चरण" के लिए समानार्थी "stride" है - वास्तव में Strideable protocol, many common numerical types द्वारा कार्यान्वित किया गया।

(i = 1; i < max; i+=2) के बराबर है:

for i in stride(from: 1, to: max, by: 2) { 
    // Do something 
} 
वैकल्पिक रूप से

, i<=max के बराबर प्राप्त करने के लिए, through संस्करण का उपयोग करें:

for i in stride(from: 1, through: max, by: 2) { 
    // Do something 
} 

ध्यान दें कि stride रिटर्न एक StrideTo/StrideThrough है, जो के अनुरूप है Sequence, तो आप अनुक्रम के साथ कुछ भी कर सकते हैं, आप stride पर कॉल के परिणाम के साथ कर सकते हैं (यानी map, forEach, filter, आदि)। उदाहरण के लिए:

stride(from: 1, to: max, by: 2).forEach { i in 
    // Do something 
} 
+1

कौन जानता था ?? धन्यवाद। – Fattie

+15

स्विफ्ट 3 में आप ग्लोबल फ़ंक्शंस 'स्ट्रइड (से: through: by:)' और 'stride (से: to: by:) ' जैसे' i i stride (से: 1, to: max, by : 2) {...} ' –

+3

@ मार्कोनोकोलोव्स्की कृपया अन्य उपयोगकर्ताओं के उत्तरों में कोड न जोड़ें। हम शब्दों को उनके मुंह में नहीं रखना चाहते हैं। इसके बजाय, एक नया जवाब जोड़ें। चूंकि यह प्रश्न बंद है, इसलिए आप लिंक किए गए डुप्लिकेट में एक नया उत्तर जोड़ सकते हैं। – JAL

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

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