जावा के बराबर स्विफ्ट स्ट्रिंग ()


92

toString()कक्षा उदाहरण की स्थिति को मुद्रित करने के लिए जावा के स्विफ्ट के बराबर क्या है ?


जवाबों:


122

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एक और अधिक प्रोग्रामर के अनुकूल संस्करण के लिए
nielsbot

2
क्या यह संरचनाओं के लिए लागू होता है?
lmiguelvargasf

1
हां, CustomStringConvertible ने Printable को बदल दिया। @Antonio, मैं जब यह बदल याद नहीं है, लेकिन यह लंबे समय से पहले स्विफ्ट 3. निश्चित रूप से था
vacawama

1
MyClass को NSObject
DàChún

7

यदि कक्षा के बजाय संरचना का उपयोग करना संभव है, तो ऐसा करने के लिए कुछ भी अतिरिक्त नहीं है।

संरचना सिर्फ आउटपुट के लिए ठीक प्रिंट करती है

print("\(yourStructInstance)")

या इस तरह वर्ग के साथ:

print(String(describing: yourClassInstance))

6

आपको उपयोग करना चाहिए String(obj)

CustomStringConvertible के लिए प्रलेखन से प्रत्यक्ष :

ध्यान दें

स्ट्रिंग (उदाहरण) किसी भी प्रकार की आवृत्ति के लिए काम करेगा, यदि विवरण होता है तो इसका विवरण कस्टमस्ट्रीमिंगकॉनवर्टेबल होगा। एक सामान्य बाधा के रूप में CustomStringConvertible का उपयोग करना, या एक अनुरूप प्रकार के विवरण को सीधे एक्सेस करना, इसलिए हतोत्साहित किया जाता है।


की description()विधि की तरह लगता CustomStringConvertibleहै पर्याप्त होगा।
ग्रेग ब्राउन

5

यह 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इसे प्राप्त करने का ज्यादातर शुद्ध स्विफ्ट तरीका है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.