2016-09-19 16 views
6

कई परेशानी के बाद, मुझे अंत में मेरा कोड स्विफ्ट 3.0 में परिवर्तित कर दिया गया।दायरे में ऑटो वृद्धि आईडी, स्विफ्ट 3.0

लेकिन ऐसा लगता है कि मेरा incrementID फ़ंक्शन अब काम नहीं कर रहा है?

कोई सुझाव मैं इसे कैसे ठीक कर सकता हूं?

मेरा incrementID और प्राथमिकKey फ़ंक्शन जैसा कि वे अभी देखते हैं।

override static func primaryKey() -> String? { 
    return "id" 
} 

func incrementID() -> Int{ 
    let realm = try! Realm() 
    let RetNext: NSArray = Array(realm.objects(Exercise.self).sorted(byProperty: "id")) as NSArray 
    let last = RetNext.lastObject 
    if RetNext.count > 0 { 
     let valor = (last as AnyObject).value(forKey: "id") as? Int 
     return valor! + 1 
    } else { 
     return 1 
    } 
} 

उत्तर

23

यहाँ KVC उपयोग करने के लिए, या सिर्फ एक क्रमबद्ध सरणी बनाने के लिए अधिकतम मूल्य प्राप्त करने की आवश्यकता नहीं है। आप बस कर सकते हैं:

func incrementID() -> Int { 
    let realm = try! Realm() 
    return (realm.objects(Exercise.self).max(ofProperty: "id") as Int? ?? 0) + 1 
} 
+1

मुझे ऐसा लगता है कि इससे कुछ समस्या हो सकती है। यदि आप अधिकतम आईडी ऑब्जेक्ट को हटाते हैं, तो एक और ऑब्जेक्ट जोड़ें, नई ऑब्जेक्ट की आईडी हटाए गए ऑब्जेक्ट की आईडी के साथ समान होगी। –

+0

हटाए गए ऑब्जेक्ट की आईडी में समस्या क्या है? इसका मतलब यह नहीं है कि आईडी उपयोग करने के लिए स्वतंत्र है? लेकिन प्रदर्शन के मुद्दे के लिए, आपको केवल एक बार इस मान से पूछना चाहिए। –

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