है विभिन्न उपयोग मामलों के लिए कुछ बारीकियों हैं, लेकिन आम तौर पर एक अंडरस्कोर "इस पर ध्यान न दें" का अर्थ है।
जब एक नया समारोह घोषणा करते हुए एक अंडरस्कोर स्विफ्ट बताता है कि पैरामीटर कोई लेबल जब कहा जाता है होना चाहिए - यह मामला आप देख रहे हैं है। एक पूर्ण कार्य घोषणा इस तरह दिखती है:
func myFunc(label name: Int) // call it like myFunc(label: 3)
"लेबल" एक तर्क लेबल है, और जब आप फ़ंक्शन को कॉल करते हैं तो उपस्थित होना चाहिए। (और स्विफ्ट 3 के बाद से, डिफ़ॉल्ट रूप से सभी तर्कों के लिए लेबल आवश्यक हैं।) "नाम" उस तर्क के लिए परिवर्तनीय नाम है जिसे आप फ़ंक्शन के अंदर उपयोग करते हैं। एक छोटा रूप इस तरह दिखता है:
func myFunc(name: Int) // call it like myFunc(name: 3)
यह एक शॉर्टकट आप दोनों बाह्य तर्क लेबल और आंतरिक पैरामीटर नाम के लिए एक ही शब्द का उपयोग करने देता है। यह func myFunc(name name: Int)
के बराबर है।
आप अपने समारोह पैरामीटर लेबल के बिना प्रतिदेय होना चाहते हैं, तो आप कुछ भी नहीं लेबल/नजरअंदाज कर दिया हो बनाने के लिए अंडरस्कोर _
का उपयोग करें। (यदि आप पैरामीटर का उपयोग करने में सक्षम होना चाहते हैं तो उस स्थिति में आपको एक आंतरिक नाम देना होगा।)
func myFunc(_ name: Int) // call it like myFunc(3)
एक काम बयान में एक अंडरस्कोर का अर्थ है "कुछ भी करने के लिए आवंटित नहीं है"। यदि आप एक फ़ंक्शन को कॉल करना चाहते हैं तो आप इसका उपयोग कर सकते हैं जो परिणाम देता है लेकिन लौटाए गए मूल्य की परवाह नहीं करता है।
_ = someFunction()
या, जैसे लेख में आप के लिए, एक लौट आए टपल का एक तत्व की उपेक्षा से जुड़ा हुआ:
let (x, _) = someFunctionThatReturnsXandY()
जब आप एक बंद है कि कुछ निर्धारित फ़ंक्शन प्रकार लागू करता है लिखते हैं, आप कर सकते हैं कुछ मानकों को अनदेखा करने के लिए अंडरस्कोर का उपयोग करें।
PHPhotoLibrary.performChanges({ /* some changes */ },
completionHandler: { success, _ in // don't care about error
if success { print("yay") }
})
इसी प्रकार, जब एक समारोह है कि एक प्रोटोकॉल को गोद ले या एक सुपर क्लास विधि ओवरराइड करता है की घोषणा, आप _
पैरामीटर के लिए नाम मानकों की अनदेखी करने के लिए उपयोग कर सकते हैं। चूंकि प्रोटोकॉल/सुपरक्लास यह भी परिभाषित कर सकता है कि पैरामीटर में कोई लेबल नहीं है, इसलिए आप पंक्ति में दो अंडरस्कोर भी समाप्त कर सकते हैं।
class MyView: NSView {
override func mouseDown(with _: NSEvent) {
// don't care about event, do same thing for every mouse down
}
override func draw(_ _: NSRect) {
// don't care about dirty rect, always redraw the whole view
}
}
कुछ हद तक पिछले दो शैलियों से संबंधित: जब एक प्रवाह नियंत्रण निर्माण कि एक स्थानीय चर बांधता का उपयोग कर/निरंतर, आप _
का उपयोग इसे अनदेखा कर सकते हैं।
for _ in 1...20 { // or 0..<20
// do something 20 times
}
आप एक स्विच बयान में टपल मामलों बाध्यकारी रहे हैं, अंडरस्कोर वाइल्डकार्ड के रूप में काम कर सकते हैं, इस में के रूप में: उदाहरण के लिए, आप अपने सदस्यों के लिए उपयोग की जरूरत के बिना एक दृश्य पुनरावृति करना चाहते हैं उदाहरण (The Swift Programming Language में से एक से छोटा):
switch somePoint { // somePoint is an (Int, Int) tuple
case (0, 0):
print("(0, 0) is at the origin")
case (_, 0):
print("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
print("(0, \(somePoint.1)) is on the y-axis")
default:
print("(\(somePoint.0), \(somePoint.1)) isn't on an axis")
}
ग्रेट विवरण, धन्यवाद श्रीमान! –
मुझे लगता है कि आप बस एक बहुत अच्छा उपयोग मामला भूल गए। कभी-कभी आप केवल सरणी या शब्दकोश में वस्तुओं के ** नंबर ** में रुचि रखते हैं और * वास्तविक * में रुचि नहीं रखते हैं। तो आप कुछ आरे {{सामान}} में '_ के लिए कुछ करते हैं। आम तौर पर जब आप मूल्य की देखभाल करते हैं तो यह कुछ आरे {ऑब्जेक्ट्स} ' – Honey
अच्छा ऑब्जेक्ट में ऑब्जेक्ट के लिए होगा। मैंने इसे और कुछ अन्य जोड़े। – rickster