2015-07-14 14 views
11

जब मैं निम्नलिखित कोड का उपयोग करें और nameTextField "जेफरी" (या किसी अन्य नाम)स्विफ्ट स्ट्रिंग इंटरपोलेशन वैकल्पिक प्रदर्शित?

@IBAction func helloWorldAction(nameTextField: UITextField) { 

    nameLabel.text = "Hello, \(nameTextField.text)" 

} 

nameLabel प्रदर्शित करता है ... हैलो, वैकल्पिक ("जेफरी")

लेकिन, हो सकता है जब मैं बदल नहीं देते पिछले कोड को "!" शामिल करने के लिए इस तरह: "!"

@IBAction func helloWorldAction(nameTextField: UITextField) { 

    nameLabel.text = "Hello, \(nameTextField.text!)" 

} 

उम्मीद और nameLabel प्रदर्शित करता है .... हैलो के रूप में कोड काम करता है, जेफरी

क्यों है आवश्यक, वीडियो ट्यूटोरियल में मैं इस सरल कार्यक्रम को बनाने के लिए प्रयोग करता था, उसने "!" का उपयोग नहीं किया और कार्यक्रम अपेक्षित के रूप में काम किया।

उत्तर

10

विकल्प अनचाहे होना चाहिए। जैसा कि आप करते हैं, आपको इसके लिए जांच करनी चाहिए या अनचाहे बल देना चाहिए। एक बॉक्स के रूप में वैकल्पिक कल्पना कीजिए जहां आप एक मूल्य डालते हैं। इससे पहले कि आप इसे एक्सेस कर सकें, आपको इसे बाहर रखना होगा।

if let name = nameTextField.text { 
    nameLabel.text = "Hello, \(name)" 
} 
+0

बिल्कुल सही, धन्यवाद! –

+14

स्ट्रिंग इंटरपोलेशन के लिए स्विफ़ के रचनाकारों द्वारा यह एक भयानक डिज़ाइन पसंद की तरह लगता है। मैं किसी अन्य भाषा के बारे में नहीं जानता जो यह करता है। अगर यह मौजूद है तो अनचाहे मूल्य को प्रिंट करने के लिए यह और अधिक समझ में आता है, अन्यथा रिक्त या शून्य प्रिंट करें। या स्ट्रिंग इंटरपोलेशन के अंदर विकल्प को अनुमति न दें। इसने हमारे लिए बहुत सारी बग पैदा की है। – bobics

14

एक अन्य विकल्प if let की आवश्यकता के बिना खूबसूरत पाठ के लिए अंतर्वेशित स्ट्रिंग के भीतर अशक्त कोलेसिंग ऑपरेटर का प्रयोग है।

nameLabel.text = "Hello, \(nameTextField.text ?? "")" 

यह इस मामले में कम पठनीय है, लेकिन यदि बहुत सारे तार थे तो यह बेहतर हो सकता है।

+0

जब भी मैं इसका उपयोग करता हूं तो यह मेरा निर्माण समय चौगुनी बनाता है। –

+0

दुर्भाग्यवश, मेरे मामले में मैं वैकल्पिक इंट मानों को अलग करने की कोशिश कर रहा हूं - खाली स्ट्रिंग के साथ सहवास नहीं कर सकता। – RonLugge

+0

@RonLugge नहीं, लेकिन आप शून्य के साथ कर सकते हैं :-) –

संबंधित मुद्दे