2015-05-20 7 views
17

हाय मैं इस कोड के बारे में एक प्रश्न है:द्विआधारी ऑपरेटर + दो पूर्णांक ऑपरेंड के लिए लागू नहीं किया जा सकता

1)

let label = "The width is " 
let width = 94 
let widthLabel = label + String(width) 

2)

let height = "3" 
let number = 4 
let hieghtNumber = number + Int(height) 

पहले भाग अभी काम कर रहा है ठीक है, लेकिन मुझे नहीं पता कि दूसरा क्यों नहीं है। मुझे त्रुटि मिल रही है 'बाइनरी ऑपरेटर "+" दो इंट ऑपरेंड पर लागू नहीं किया जा सकता है, जो मेरे लिए बहुत अधिक समझ में नहीं आता है। क्या कोई मुझे कुछ स्पष्टीकरण के साथ मदद कर सकता है?

let height = "3" 
let number = 4 
let heightNumber = number + height.toInt()! 

आप एक String आप toInt() का उपयोग से एक Int प्राप्त करना चाहते हैं:

+0

[इस प्रश्न] का जवाब भी देखें (http: //stackoverflow.com/questions/40557214/swift-operator-throwing-error-on-two-ints)। अनिवार्य रूप से, अगर ए को पहले से ही CGFloat के डबल के रूप में घोषित किया गया है या जो भी हो, और बी और सी पूर्णांक हैं, तो ए = बी + सी इस त्रुटि संदेश से असफल हो जाएगा, जो वास्तविक समस्या और समाधान को अस्पष्ट करता है: ए = डबल (बी + सी) । यह त्रुटि/उत्तर इस त्रुटि के लिए Google खोज के शीर्ष पर है; कुछ मामलों में अन्य प्रश्न का उत्तर अधिक उपयोगी हो सकता है। – ConfusionTowers

उत्तर

15

1) पहला कोड काम करता है क्योंकि String में एक इनिट विधि है जो Int लेती है। फिर लाइन

let widthLabel = label + String(width) 

पर आप widthLabel बनाने के लिए तार श्रृंखलाबद्ध कर रहे हैं, + ऑपरेटर के साथ,।

2) स्विफ्ट त्रुटि संदेश काफी भ्रामक हो सकता है, वास्तविक समस्या Int है एक init विधि है कि एक String लेता नहीं है। इस स्थिति में आप पर toInt विधि का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:

if let h = height.toInt() { 
    let heightNumber = number + h 
} 

आप का उपयोग करना चाहिए और if let बयान String के लिए एक InttoInt के बाद से nil वापस आ जाएगी अगर यह विफल परिवर्तित किया जा सकता जाँच करने के लिए; इस स्थिति में अनचाहे बल आपके ऐप को दुर्घटनाग्रस्त कर देगा। क्या हुआ अगर height होने वाले परिवर्तनों का निम्न उदाहरण देखें एक Int के लिए परिवर्तनीय नहीं था:

let height = "not a number" 

if let h = height.toInt() { 
    println(number + h) 
} else { 
    println("Height wasn't a number") 
} 

// Prints: Height wasn't a number 

स्विफ्ट 2.0 अपडेट:

Int अब एक initialiser जो एक String लेता है, उदाहरण बन गया है 2 (ऊपर देखें):

if let h = Int(height) { 
    let heightNumber = number + h 
} 
+0

क्या यह किसी भी स्थिति में कुछ (int) कुछ स्ट्रिंग का उपयोग करने के लिए कोई समझ में आता है। मैं केवल त्रुटि विवरण से उलझन में हूं कि मुझे लगता है कि ऑपरेंड इंट हैं, जिसका मतलब है कि ऊंचाई किसी भी तरह से इंट पर डाली जाती है। –

+1

नहीं, सबसे पहले, यह स्विफ्ट में कास्टिंग के लिए वाक्यविन्यास नहीं है (आप 'as' के रूप में उपयोग करेंगे, https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html देखें)। दूसरा, स्विफ्ट त्रुटि संदेशों में काफी भ्रामक होने की आदत है, वास्तविक समस्या यह है कि 'Int' पर' init' नहीं है जो 'स्ट्रिंग' लेता है। – ABakerSmith

+0

ग्रेट स्पष्टीकरण! आपका बहुत - बहुत धन्यवाद! –

0

आपको क्या करना होगा यह है।

+0

हाँ, मुझे पता है कि। लेकिन त्रुटि विवरण के अनुसार भी यह ऑपरेशन करने में सक्षम होने के लिए समझ में आता है। यह किसी भी तरह int की ऊंचाई कास्टिंग कर रहा है। और मैं सोच रहा हूं कि वह क्यों है। –

+0

ऐसा इसलिए है कि आप 'इंट्र' को 'स्ट्रिंग' के साथ प्रारंभ करना चाहते हैं, जिसकी अनुमति नहीं है। आप केवल एक इंटीजर के साथ 'Int' init' कर सकते हैं। उदाहरण के लिए - 'एक = Int (25) 'दें। –

+0

ठीक है। समझ गया। आपका बहुत बहुत धन्यवाद! –

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

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