2015-09-17 9 views
5

में एक "forCount" नियंत्रण संरचना बनाएँ कई परियोजनाओं में यह नियंत्रण संरचना पठनीयता के लिए आदर्श है:स्विफ्ट

forCount(40) 
{ 
// this block is run 40 times 
} 

आप उद्देश्य सी में exactly that कर सकते हैं।

को देखते हुए स्विफ्ट मैक्रो से ऑब्जेक्टिव-सी करने के लिए एक बहुत अलग दृष्टिकोण है कि,

वहाँ स्विफ्ट परियोजनाओं में इस तरह के एक forCount(40) नियंत्रण संरचना बनाने के लिए एक तरीका है?


स्विफ्ट में कुछ इसी तरह की अवधारणाओं:

for _ in 1...40 
{ // this block is run 40 times } 

का उपयोग करते हुए एक ingenious extension to Int ...

40.times 
{ // this block is run 40 times } 
+0

भी देखें http://www.drewag.me/posts/7-cool-features-in -swift # विस्तार-structs और शाब्दिक। –

+0

हाय मार्टिन, "5. टाइम्स" एक्सटेंशन चाल बहुत ही भयानक है, और मैं आपको धन्यवाद देता हूं, लेकिन मैं वास्तव में सोच रहा था कि क्या शब्द बनाने के लिए कोई तरीका था (एन) वाक्य रचनात्मक रूप से काम करता है, क्योंकि प्रीप्रोसेसर होने पर आसानी से कोई आसानी से काम कर सकता है। जैसा कि सवाल में कहा गया है। ऐसा करने के सबसे छोटे तरीके की तलाश नहीं है। – Fattie

+0

फिर मैंने आपके प्रश्न को गलत समझा (इसके लिए खेद है!), मैंने इसे फिर से खोल दिया है। –

उत्तर

10

स्विफ्ट में कोई पूर्वप्रक्रमक मैक्रो रहे हैं, लेकिन आप एक वैश्विक समारोह को परिभाषित कर सकते पुनरावृत्ति गणना और तर्क के रूप में बंद करना:

func forCount(count : Int, @noescape block :() ->()) { 
    for _ in 0 ..< count { 
     block() 
    } 
} 

"अनुगामी बंद वाक्य रचना" के साथ, यह की तरह दिखता है एक अंतर्निहित नियंत्रण बयान:

forCount(40) { 
    print("*") 
} 

@noescape विशेषता संकलन कुछ अनुकूलन बनाने के लिए और उदाहरण चर का उल्लेख करने की अनुमति देता है अधिक जानकारी के लिए self का उपयोग किए बिना, @noescape attribute in Swift 1.2 देखें।

स्विफ्ट 3, के रूप में "noescape" समारोह पैरामीटर के लिए डिफ़ॉल्ट विशेषता है:

func forCount(_ count: Int, block:() ->()) { 
    for _ in 0 ..< count { 
     block() 
    } 
} 
+0

शानदार .... – Fattie

+0

मार्टिन, 100 से अधिक अंक भेजकर अपने जैसे नए उपयोगकर्ता की मदद करना बहुत अच्छा है :) – Fattie