2015-11-19 5 views
9

मैं एक Int?
वर्तमान में मैं इस लिखा है बढ़ाने के लिए करना चाहते हैं:क्या कोई वैकल्पिक इंट बढ़ाने के लिए कोई शानदार तरीका है?

return index != nil ? index!+1 : nil 

वहाँ कुछ खूबसूरत तरीका यह लिखने के लिए है? आप अपने आप को पाया में इस कई बार कर रही हैं

return index?.advancedBy(15) 

: एक मनमाना मूल्य, advancedBy काम करता है के लिए

return index?.successor() 

:

+0

तब कभी भी ध्यान न दें। – Arc676

+0

नहीं सरल गणित ऑपरेटर विकल्प के साथ काम नहीं करते हैं। –

उत्तर

7

पूर्णता के लिए, Optional एक map() विधि है:

/// If `self == nil`, returns `nil`. Otherwise, returns `f(self!)`. 
@warn_unused_result 
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U? 

इसलिए

index != nil ? index! + 1 : nil 

index.map { $0 + 1 } 
+0

मुझे लगता है कि वृद्धि + + 1 के साथ अधिक दिखाई दे रही है और यह किसी भी अन्य नंबर के साथ काम करेगी :) –

6

आप वैकल्पिक का उपयोग कर successor संपत्ति चेनिंग कॉल कर सकते हैं आपका कोड, आप अपना खुद का + ऑपरेटर परिभाषित कर सकते हैं जोजोड़ता हैInt? एक करने के लिए:

func +(i: Int?, j: Int) -> Int? { 
    return i == nil ? i : i! + j 
} 

तो फिर तुम सिर्फ कर सकता है:

return index + 1 
+0

आपके उत्तर के लिए अच्छा जोड़ा! –

+0

धन्यवाद! मैंने अभी तक एक और जोड़ा। – vacawama

0

के बराबर है आप वैकल्पिक रूप से एक प्रश्न चिह्न के साथ कॉल prepending द्वारा एक वैकल्पिक पर किसी भी विधि कॉल कर सकते हैं, और इस पोस्टफ़िक्स ऑपरेटरों के लिए भी काम करता है: और अधिक आम तौर

return index?++ 

आप भी कर सकते हैं लिखें:

index? += 1; return index 
+1

जैसा कि एक हटाए गए प्रश्न में कहा गया है, इंडेक्स स्थिर होने पर यह काम नहीं कर रहा है (चलो) –

+0

वापसी सूचकांक? + = 1' काम नहीं करता है। यह संकलन त्रुटि देता है 'त्रुटि: प्रकार की वापसी अभिव्यक्ति को परिवर्तित नहीं कर सकता'()? ' टाइप करने के लिए 'Int?' ' – vacawama

+0

आप सही हैं। मैंने समस्या को ठीक करने के लिए अपना कोड स्निपेट संपादित किया है। वैसे भी, यह अभी भी काम करने की आवश्यकता को पूरा नहीं करता है और मानचित्र का उपयोग कर पहले से ही एक अच्छा जवाब है। –

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

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