2015-06-12 6 views
13

मैं स्विफ्ट में एक घड़ी ऐप पर काम कर रहा हूं और एक्सकोड 6.3.2 के साथ निम्नलिखित कोड बनाता है और ठीक चलाता है।NSDateComponents वाक्यविन्यास में मतभेद?

// Get current time 
let date = NSDate() 
let calendar = NSCalendar.currentCalendar() 
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitNanosecond, fromDate: date) 
let hour = components.hour % 12 
let minute = components.minute 
let second = components.second 
let nanosecond = components.nanosecond 

हालांकि जब मैं 7.0 बीटा Xcode में एक ही परियोजना लोड और कोई बदलाव नहीं जो भी करते हैं, मैं calendar.components लाइन पर कोई त्रुटि मिलती है।

Could not find member 'CalendarUnitHour' 

मैं प्रलेखन पर देखा है और NSCalendarUnit स्थिरांक की सभी बहिष्कृत कर रहे हैं (आईओएस 8.0 में यह कहते हैं), लेकिन घटक विधि के लिए विधि का वर्णन अब भी उनका उपयोग करने के लिए कहते हैं।

मैंने अन्य एनएससीएंडर के साथ ऑटो-पूर्ण मूल्यों के साथ खेला है लेकिन कोई भी कामकाजी कोड नहीं बना रहा है और मुझे कोई हालिया उदाहरण ऑनलाइन नहीं मिल रहा है, शायद यह नया ब्रांड है।

कोई भी ऐसा करने का नया सही तरीका जानता है?

उत्तर

32

स्विफ्ट 2

NSCalendarUnit नाम स्विफ्ट 2 में बदल दिया है

इसके अलावा, अब हम एक OptionSet में इन तर्कों पारित करने के लिए है, इस तरह:

let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date) 

स्विफ्ट 3

कई चीजें बदल गई हैं, accor Swift API Design Guidelines पर डिंग करें।

अपडेट किए गए वाक्य रचना:

let date = Date() 
let calendar = Calendar.current() 
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date) 

स्विफ्ट 4

Calendar.current अब एक संपत्ति है, और .components.dateComponents को नाम दिया गया है। अन्यथा यह स्विफ्ट 3 के समान है।

let calendar = Calendar.current 
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date) 
+0

धन्यवाद! यह मुझे लड़ाकू चला रहा था। मेरा कोड अब 100% साफ है। :-) – zkarj

+1

इस एसओ सवाल को खोजने के अलावा इसे समझने के किसी भी तरीके से एक और हास्यास्पद परिवर्तन नहीं। धन्यवाद ऐप्पल! (व्यंग्य)। धन्यवाद एरिक! (कटाक्ष नहीं)। – lespommes

+0

स्विफ्ट 2 में नाम परिवर्तनों के कारण, यह मुझे त्रुटि दे रहा था "अभिव्यक्ति का प्रकार अधिक संदर्भ के बिना अस्पष्ट है"। –

1

वे अब एक नया प्रोटोकॉल हैं। OptionSetType

https://developer.apple.com/library/prerelease/mac/documentation/Swift/Reference/Swift_OptionSetType_Protocol/index.html

+0

डाउन वोट क्यों। यह एक आम गलती है जो लोग स्विफ्ट 2 पर जाने के बाद से बना रहे हैं। मैं आपको बार का उपयोग करने का तकनीकी कारण दे रहा हूं अब काम नहीं करता !! –