मैं सवाल पसंद वस्तु को प्रारंभ करना होगा। केवल स्विफ्ट टीम निश्चित रूप से जवाब दे सकती है, लेकिन मैं अनुमान लगा सकता हूं कि क्यों: एक टाइप किए गए मान को एक अलग प्रकार के चर में परिवर्तित करने के बिना एक स्पष्ट रूपांतरण या कलाकार के बिना प्रोग्रामर त्रुटि के साथ भ्रमित करना बहुत आसान है, और कई मामलों में कुछ ऐसा है कंपाइलर के बारे में चेतावनी दी जानी चाहिए।
उदाहरण (और मान लेते हैं कि Person
भी एक StringLiteralConvertible
कि एक शाब्दिक और साथ ही एक स्ट्रिंग चर के साथ प्रारंभ किया जा सकता है के रूप में आप अपने प्रश्न में मुद्रा है):
struct Person {
private static var idCounter = 1
var name:String
let id:Int
init(withName name:String) {
Person.idCounter += 1
self.name = name
self.id = Person.idCounter
}
}
var person = Person(withName:"Mary")
let name = "John"
person = name
ऊपर कोड एक गलती की तरह संदेह से लग रहा है , जहां प्रोग्रामर Person
प्रकार के चर के लिए गलत प्रकार (String
) का मान असाइन कर रहा है। यह वास्तव में एक गलती हो सकती है। हो सकता है कि प्रोग्रामर केवल नाम व्यक्ति (person.name = name
) को एक नया अद्वितीय आईडी के साथ एक नया Person
बनाने के बिना बदलना चाहता था। या हो सकता है कि प्रोग्रामर person
पर कुछ अन्य मान असाइन करने का इरादा रखता है लेकिन एक टाइपो या कोड पूर्णता त्रुटि बना देता है। मूल प्रोग्रामर होने के बिना बताना मुश्किल है, या यह देखने के लिए सावधानी से सभी संदर्भों का अध्ययन करना है कि यह रूपांतरण समझ में आता है या नहीं। और यह अधिक कठिन हो जाता है कि असाइनमेंट उस स्थान से है जहां चर मूल रूप से प्रारंभ किए गए हैं क्या संकलक यहां चेतावनी देता है कि String
प्रकार का मान Person
प्रकार के चर के लिए असाइन किया जा रहा है?
उदाहरण कहीं अधिक स्पष्ट है, और अधिक लाइन में के रूप में स्विफ्ट परंपराओं से होगा:
var person = Person(withName:"Mary")
let name = "John"
person = Person(withName:name)
ऊपर संस्करण दोनों संकलक करने के लिए और किसी भी अन्य प्रोग्रामर जो बाद में इस पढ़ने के लिए, पूरी तरह से स्पष्ट है।
स्रोत
2016-04-08 19:24:14
क्या आपने 'मूल्य 'का प्रयास किया था? – mattsven
'value' पहले से ही एक गैर-वैकल्पिक 'बूल' है, मैं इसे'! 'लागू नहीं कर सकता। – devios1