toString()
कक्षा उदाहरण की स्थिति को मुद्रित करने के लिए जावा के स्विफ्ट के बराबर क्या है ?
toString()
कक्षा उदाहरण की स्थिति को मुद्रित करने के लिए जावा के स्विफ्ट के बराबर क्या है ?
जवाबों:
description
संपत्ति आप के लिए क्या देख रहे है। यह वह प्रॉपर्टी है जो किसी ऑब्जेक्ट वाले वेरिएबल को प्रिंट करते समय एक्सेस की जाती है।
आप description
प्रोटोकॉल को अपनाकर CustomStringConvertible
और फिर description
संपत्ति को लागू करके अपनी कक्षाओं में जोड़ सकते हैं।
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
जब आप String
कंस्ट्रक्टर को कॉल करते हैं तो इसका उपयोग किया जाता है :
let str = String(myobj) // str == "MyClass: 12"
यह उदाहरण विवरण तक पहुँचने के लिए अनुशंसित विधि है ( myobj.description
यदि कोई वर्ग लागू नहीं करता है तो इसका विरोध नहीं किया जाएगा CustomStringConvertible
)
String(obj)
?
.debugDescription
एक और अधिक प्रोग्रामर के अनुकूल संस्करण के लिए
आपको उपयोग करना चाहिए String(obj)
।
CustomStringConvertible के लिए प्रलेखन से प्रत्यक्ष :
ध्यान दें
स्ट्रिंग (उदाहरण) किसी भी प्रकार की आवृत्ति के लिए काम करेगा, यदि विवरण होता है तो इसका विवरण कस्टमस्ट्रीमिंगकॉनवर्टेबल होगा। एक सामान्य बाधा के रूप में CustomStringConvertible का उपयोग करना, या एक अनुरूप प्रकार के विवरण को सीधे एक्सेस करना, इसलिए हतोत्साहित किया जाता है।
description()
विधि की तरह लगता CustomStringConvertible
है पर्याप्त होगा।
NSObject
विस्तारित कक्षाओं के साथ कैसे किया जाता हैयदि आपका मॉडल वर्ग इससे बढ़ाया गया है NSObject
, तो आपको चर description
को इस प्रकार से ओवरराइड करना होगा :
public override var description: String {
return "\n{\n index: \(self.index),\n"
+ " country: \(self.name),\n"
+ " isoCountryCode: \(self.isoCountryCode),\n"
+ " localeId: \(self.localeId),\n"
+ " flagImageName: \(self.flagImageName!)\n}"
}
आप यह देख सकते हैं कि मैंने इसे "कंट्रीपिकर आईओएस स्विफ्ट लाइब्रेरी" में कक्षा के भीतरCountry
कैसे किया है । ।
या, इसे समझने के लिए आपको सरल बनाने के लिए, आपकी कक्षा और description
विधि निम्न प्रकार दिखनी चाहिए:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
नोट:
चूंकि आप अपनी मोडल क्लास का विस्तार कर रहे हैं, इसलिए आपको NSObject
अपनी क्लास के लिए CustomStringConvertible
अब क्लास का पालन करने की आवश्यकता नहीं है, और आप क्लास से ही description
वेरिएबल को ओवरराइड कर रहे हैं NSObject
। हमेशा याद रखें, CustomStringConvertible
इसे प्राप्त करने का ज्यादातर शुद्ध स्विफ्ट तरीका है।