2017-04-23 13 views
8

स्विफ्ट 3 दस्तावेज के अनुसार, एनएसएनंबर स्विफ्ट देशी प्रकार जैसे इंट, फ्लोट, डबल, ... के लिए ब्रिज किया गया है, लेकिन जब मैं शब्दकोश में मूल प्रकार का उपयोग करने का प्रयास करता हूं तो मुझे संकलन त्रुटियां मिलती हैं NSNumber का उपयोग करने पर तय हो जाओ, वह क्यों है? यहाँ मेरी कोड है:एनएसएनंबर बनाम इंट, स्विफ्ट शब्दकोश में फ्लोट

var dictionary:[String : AnyObject] = [:] 
dictionary["key"] = Float(1000) 

और संकलक त्रुटि देता है "AnyObject के प्रकार फ्लोट के मान निर्दिष्ट नहीं किया जा सकता"। यदि मैं कोड को निम्नानुसार लिखता हूं, तो कोई समस्या नहीं है क्योंकि NSNumber वास्तव में एक ऑब्जेक्ट प्रकार है।

dictionary["key"] = NSNumber(value:Float(1000)) 

स्विफ्ट संकलक भी

dictionary["key"] = Float(1000) as AnyObject 

के रूप में कोड को दूर करने के संकेत देता है, लेकिन मुझे यकीन है कि अगर यह कर सकते हैं या नहीं करने के लिए सही बात है नहीं कर रहा हूँ। यदि वास्तव में एनएसएनंबर और देशी प्रकारों (इंट, फ्लोट, इत्यादि) के बीच एक ब्रिजिंग है, तो संकलक किसी भी ऑब्जेक्ट को टाइपकास्ट करने के लिए मजबूर क्यों कर रहा है?

+0

संबंधित: http://stackoverflow.com/questions/39321421/working-with-nsnumber-integer-values-in-swift- 3 –

उत्तर

6

आदिम प्रकार Float की तरह, Int, Doublestruct के रूप में तो वे AnyObject प्रोटोकॉल लागू नहीं है परिभाषित कर रहे हैं। कि के अलावा

var dictionary: [String: Any] = [:] 

, अपने कोड में जब आप ऐसा करेंगे: इसके बजाय, Any किसी भी प्रकार का एक उदाहरण का प्रतिनिधित्व कर सकते सब तो अपने शब्दकोश के प्रकार होना चाहिए

dictionary["key"] = Float(1000) as AnyObject 

FloatNSNumber परोक्ष में परिवर्तित हो जाता और फिर AnyObject तक बढ़ाया गया है। उत्तरार्द्ध से बचने के लिए आप अभी as NSNumber कर सकते थे।

1
import Foundation 

var dictionary:[String : NSNumber] = [:] 
dictionary["key1"] = 1000.0 
dictionary["key2"] = 100 

let i = 1 
let d = 1.0 

dictionary["key3"] = i as NSNumber 
dictionary["key4"] = d as NSNumber 

तुम सच में एक मूल्य के रूप में AnyObject चाहते हैं, तो

import Foundation 

var dictionary:[String : AnyObject] = [:] 

dictionary["key1"] = 1000.0 as NSNumber 
dictionary["key2"] = 100 as NSNumber 

let i = 1 
let d = 1.0 

dictionary["key3"] = i as NSNumber 
dictionary["key4"] = d as NSNumber 
संबंधित मुद्दे