Swift Language
स्विफ्ट में प्रवेश करना
खोज…
टिप्पणियों
println
और debugPrintln
जहां स्विफ्ट 2.0 में हटा दिया।
सूत्रों का कहना है:
https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-log/
डिबग प्रिंट
डीबग प्रिंट उदाहरण प्रतिनिधित्व को दर्शाता है जो डीबगिंग के लिए सबसे उपयुक्त है।
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()
डिवाइस के कंसोल पर आउटपुट प्रिंट नहीं करेगा।