स्विफ्ट में जेनेरिक के साथ काम करते समय आज एक दिलचस्प बग में दौड़ें। मैंने एक समाधान निकाला, लेकिन मुझे आश्चर्य है कि कोई जवाब दे सकता है कि क्यों कंपेलर ऐसा कुछ नहीं पकड़ता है। मुझे कोड के ब्लॉक से शुरू करने दें।स्विफ्ट में खाली सरणी और जेनेरिक के साथ क्या है?
func doSomething<T>(with array: [T]) {
type(of: array) // Optional<Array<Int>>
array is [Int] // true
array is [String] // true
}
var arrayOfInts: [Int] = []
doSomething(with: arrayOfInts)
लाइन 4 देखें। हेक true
क्यों है? क्या मैं कुछ भूल रहा हूँ? क्या संकलक यह समझने के लिए पर्याप्त स्मार्ट नहीं होना चाहिए कि यह String
एस की सरणी नहीं है? आखिरकार एक बग का नेतृत्व हुआ जहां गलत प्रकार के होने वाले खाली सरणी के कारण एक मान गलत तरीके से सेट किया गया था।
जहाँ तक एक समाधान के रूप में, मैं की तर्ज पर कुछ के साथ चला गया:
if type(of: array).Element.self == Model.self
आप _know_ सरणी के तत्वों के प्रकार; यह टी। सरल है: 'अगर टी। स्वयं == Int.self' – matt
इसके अलावा मुझे पहली पंक्ति के लिए' वैकल्पिक> 'नहीं मिलता है। –
matt
जेनेरिक एक लाल हेरिंग है! '[Int]() है [स्ट्रिंग]' 'सत्य 'है। – matt