खोज…


टिप्पणियों

println और debugPrintln जहां स्विफ्ट 2.0 में हटा दिया।

सूत्रों का कहना है:

https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-log/

http://www.dotnetperls.com/print-swift

डिबग प्रिंट

डीबग प्रिंट उदाहरण प्रतिनिधित्व को दर्शाता है जो डीबगिंग के लिए सबसे उपयुक्त है।

print("Hello")
debugPrint("Hello")

let dict = ["foo": 1, "bar": 2]

print(dict)
debugPrint(dict)

पैदावार

>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]

उदाहरण के लिए यह अतिरिक्त जानकारी बहुत महत्वपूर्ण हो सकती है:

let wordArray = ["foo", "bar", "food, bars"]

print(wordArray)
debugPrint(wordArray)

पैदावार

>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]

ध्यान दें कि पहले आउटपुट में यह कैसे प्रकट होता है कि सरणी में 4 तत्व हैं जो विरोध में 3 हैं। इस तरह के कारणों के लिए, debugPrint का उपयोग करने के लिए डीबग करना बेहतर होता है।

एक वर्ग डिबग और प्रिंट मूल्यों को अद्यतन करना

struct Foo: Printable, DebugPrintable {
    var description: String {return "Clear description of the object"}
    var debugDescription: String {return "Helpful message for debugging"}
}

var foo = Foo()

print(foo)
debugPrint(foo)

>>> Clear description of the object
>>> Helpful message for debugging

ढेर

dump प्रतिबिंब (मिररिंग) के माध्यम से किसी वस्तु की सामग्री को प्रिंट करता है।

एक सरणी का विस्तृत दृश्य:

let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)

प्रिंटों:

▿ 4 तत्व
- [०]: जो
- [१]: जेन
- [२]: जिम
- [३]: जायसी

एक शब्दकोष के लिए:

let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)

प्रिंटों:

▿ 3 कुंजी / मूल्य जोड़े
: [0]: (२ तत्व)
- .0: बार
- .1: 33
: [1]: (२ तत्व)
- .0: बाज
- .1: 42
: [2]: (२ तत्व)
- .0: फू
- १: १०

dump को dump(_:name:indent:maxDepth:maxItems:) रूप में घोषित किया गया है।

पहले पैरामीटर में कोई लेबल नहीं है।

निरीक्षण के लिए लेबल सेट करने के लिए name जैसे अन्य पैरामीटर उपलब्ध हैं:

dump(attributes, name: "mirroring")

प्रिंटों:

▿ मिररिंग: 3 कुंजी / मूल्य जोड़े
: [0]: (२ तत्व)
- .0: बार
- .1: 33
: [1]: (२ तत्व)
- .0: बाज
- .1: 42
: [2]: (२ तत्व)
- .0: फू
- १: १०

आप maxItems: आइटम्स के साथ केवल एक निश्चित संख्या को प्रिंट करने का विकल्प चुन सकते हैं maxItems: ऑब्जेक्ट को अधिकतम डेप्थ के साथ एक निश्चित गहराई तक पार्स करने के लिए maxDepth: और indent: साथ मुद्रित वस्तुओं के इंडेंटेशन को बदलने के लिए:।

प्रिंट () बनाम डंप ()

हम में से कई साधारण print() साथ डिबगिंग शुरू करते हैं। मान लीजिए कि हमारे पास ऐसी कक्षा है:

class Abc {
    let a = "aa"
    let b = "bb"
}

और हमारे पास Abc उदाहरण है:

let abc = Abc()

जब हम वेरिएबल पर print() चलाते हैं, तो आउटपुट होता है

App.Abc

dump() करते समय dump() आउटपुट

App.Abc #0
- a: "aa"
- b: "bb"

जैसा कि देखा गया है, dump() पूरे वर्ग पदानुक्रम को आउटपुट करता है, जबकि print() बस वर्ग नाम का आउटपुट देता है।

इसलिए, dump() UI डिबगिंग के लिए विशेष रूप से उपयोगी है

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

dump(view) हमें मिलता है:

 - <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
    - super: UIResponder
      - NSObject 

जबकि print(view) हमें मिलता है:

<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>

dump() साथ वर्ग पर अधिक जानकारी है, और इसलिए यह कक्षा को डीबग करने में अधिक उपयोगी है।

प्रिंट बनाम NSLog

स्विफ्ट में हम Xcode कंसोल पर कुछ प्रिंट करने के लिए प्रिंट print() और NSLog() फ़ंक्शन दोनों का उपयोग कर सकते हैं।

लेकिन print() और NSLog() कार्यों में बहुत अंतर हैं, जैसे:

1 टाइमस्टैम्प: NSLog() टाइमस्टैम्प को उस स्ट्रिंग के साथ प्रिंट करेगा, जिसे हमने पास किया था, लेकिन print() टाइमस्टैम्प को प्रिंट नहीं करेगा।
जैसे

let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)

आउटपुट:

[१, २, ३, ४, ५]
2017-05-31 13: 14: 38.582 प्रॉजेक्टनेम [2286: 7473287] [1, 2, 3, 4, 5]

यह टाइमस्टैम्प के साथ ProjectName को भी प्रिंट करेगा।

2 ओनली स्ट्रिंग: NSLog() केवल स्ट्रिंग को एक इनपुट के रूप में लेता है, लेकिन print() इसमें पारित किसी भी प्रकार के इनपुट को प्रिंट कर सकता है।
जैसे

let array = [1, 2, 3, 4, 5]
print(array) //prints [1, 2, 3, 4, 5]
NSLog(array) //error: Cannot convert value of type [Int] to expected argument type 'String'

3 प्रदर्शन: NSLog() फ़ंक्शन print() फ़ंक्शन की तुलना में बहुत धीमा है

4 सिंक्रनाइज़ेशन: NSLog() बहु-थ्रेडिंग वातावरण से एक साथ उपयोग को संभालता है और इसे ओवरलैप किए बिना आउटपुट प्रिंट करता है। लेकिन print() आउटपुट प्रेटिंग करते समय ऐसे मामलों और जंबल्स को हैंडल नहीं करेगा।

5 डिवाइस कंसोल: डिवाइस कंसोल पर NSLog() आउटपुट भी, हम अपने डिवाइस को Xcode से कनेक्ट करके इस आउटपुट को देख सकते हैं। print() डिवाइस के कंसोल पर आउटपुट प्रिंट नहीं करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow