स्विफ्ट में स्ट्रिंग से पूर्णांक मान प्राप्त करें


134

तो मैं यह कर सकता हूँ:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

लेकिन मैं इसे w / a करने का तरीका नहीं खोज सकता String। मैं कुछ करना चाहता हूँ जैसे:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

यह भी काम नहीं करता है:

var someNumbAlt: Int = myString.integerValue

1
var someNumb: Int? = Int(stringNumb)याvar someNumb = Int(stringNumb)
SwiftArchitect

जवाबों:


179

स्विफ्ट 2.0 आप कंस्ट्रक्टर का उपयोग करके इंटीजर को इनिशियलाइज़ कर सकते हैं

var stringNumber = "1234"
var numberFromString = Int(stringNumber)

14
स्विफ्ट 2.0 के रूप में आपके पास अब toInt()भाग के रूप में विधि नहीं है String। तो यह Intकंस्ट्रक्टर अब स्ट्रिंग्स को किलों में बदलने का एकमात्र तरीका है।
मॉर्गन वाइल्ड

1
अर्धविराम आवश्यक नहीं है
सेबस्टियन

क्या आप बता सकते हैं कि यदि टेक्स्ट फ़ील्ड में उपयोगकर्ता एक Int64 सीमा संख्या से अधिक संख्या में प्रवेश करता है तो उसे कैसे संभालें
खूशबू ढोते

1
@ सेबस्टियन कि निराशा नहीं है? :)
विक्टर

94

मैं उपयोग करूँगा:

var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)

नोट toInt():

यदि स्ट्रिंग एक पूर्णांक का प्रतिनिधित्व करता है जो एक इंट में फिट बैठता है, तो संबंधित पूर्णांक देता है।


5
यह काम किया है, हालांकि यदि आप स्पष्ट var someNumb: Int = stringNumber.toInt()!रूप से संस्करण घोषित करते हैं, तो आपको एक विस्मयादिबोधक बिंदु जोड़ने की आवश्यकता है: जैसा कि @NateCook ने कहा है
लोगान

मैं इसे स्पष्ट रूप से घोषित नहीं कर रहा हूं। संकलक जानता है कि numberFromString एक पूर्णांक है क्योंकि यह एक के रूप में initialised है होना चाहिए ...
CW0007007

मुझे पता है कि आप नहीं हैं, लेकिन मैं हूं। मुझे ऐसा करने के लिए वह समायोजन करना पड़ा। आपका कोड सही है, बस इसे टिप्पणी के रूप में जोड़ रहा है।
लोगन

हां यह केवल एक मान लौटाता है यदि मान इंट में फिट बैठता है जैसा कि नोट बताता है। अन्यथा यह शून्य देता है ...
CW0007007

5
!कॉल पर डालने के बजाय , आप अपने चर को वैकल्पिक घोषित कर सकते हैं someNumb: Int? = stringNumber.toInt():। तब प्रकार की सुरक्षा प्रणाली अवगत होगी जो fooमौजूद नहीं हो सकती है। लाना !पाठ्यक्रम दुर्घटना की इच्छा करता है, तो अपने स्ट्रिंग एक नंबर में परिवर्तित नहीं कर सकते हैं।
gwcoffey

18

स्विफ्ट 3.0 में

टाइप 1: NSString को स्ट्रिंग में कनवर्ट करें

    let stringNumb:NSString = "1357"
    let someNumb = Int(stringNumb as String) // 1357 as integer

टाइप 2: यदि स्ट्रिंग में केवल इंटेगर है

    let stringNumb = "1357"
    let someNumb = Int(stringNumb) // 1357 as integer

टाइप 3: यदि स्ट्रिंग का फ्लोट मान है

    let stringNumb = "13.57"
    if let stringToFloat = Float(stringNumb){
        let someNumb = Int(stringToFloat)// 13 as Integer
    }else{
       //do something if the stringNumb not have digit only. (i.e.,) let stringNumb = "13er4"
    }

"टाइप 3" के लिए कोड आदर्श नहीं है। की जाँच करने के बजाय stringToFloatहै != nil, आप का उपयोग करना चाहिए if let
रैड्डी जूल

11

विधि जो आप चाहते हैं toInt()- आपको थोड़ा सावधान रहना होगा, क्योंकि toInt()रिटर्न एक वैकल्पिक इंट।

let stringNumber = "1234"
let numberFromString = stringNumber.toInt()
// numberFromString is of type Int? with value 1234

let notANumber = "Uh oh"
let wontBeANumber = notANumber.toInt()
// wontBeANumber is of type Int? with value nil

लेकिन इसी तरह, toInt()यह करने का सही तरीका है। वैकल्पिक भाषा का एक मुख्य हिस्सा हैं
जियारो

बेशक, आपको बस यह पता होना चाहिए कि आप एक वैकल्पिक के साथ काम कर रहे हैं, एक सीधे इंट से नहीं।
नैट कुक

5

यदि आप NSStringकेवल उपयोग करने में सक्षम हैं ।

यह वस्तुनिष्ठ-सी के समान है। सभी डेटा प्रकार वहाँ हैं, लेकिन as NSStringइसके अतिरिक्त की आवश्यकता है

    var x = "400.0" as NSString 

    x.floatValue //string to float
    x.doubleValue // to double
    x.boolValue // to bool
    x.integerValue // to integer
    x.intValue // to int

इसके अलावा हमारे पास एक toInt()समारोह है, ऐपल इंक देखें "स्विफ्ट प्रोग्रामिंग लैंग्वेज।" iBooks। https://itun.es/us/jEUH0.l पृष्ठ 49

x.toInt()

जोड़ना भूल गया as NSString। इसे @gwcoffey
John Riselvato

2
मैं NSString का उपयोग नहीं करना चाहता, प्रश्न देखें।
लोगन

4

उपरोक्त उत्तर ने मेरी मदद नहीं की क्योंकि मेरा स्ट्रिंग मूल्य "700.00" था

स्विफ्ट 2.2 के साथ यह मेरे लिए काम करता है

let myString = "700.00"
let myInt = (myString as NSString).integerValue

मैं NSFormatterClass के लिए myInt पारित कर दिया

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is700

इस ब्लॉग पोस्ट के लिए धन्यवाद ।


1
यह प्रश्न एक स्ट्रिंग से पूर्णांक प्राप्त करने के बारे में है । आपके मामले में, आपके पास कोई इंट नहीं है, आपके पास एक डबल है। स्विफ्ट में, Double()हम उसी तरह उपयोग कर रहे हैं जैसे हम उपयोग कर रहे हैं Int()। NSString के लिए ब्रिजिंग का उपयोग करने की आवश्यकता नहीं है।
एरिक आया

आपके सुझाव के लिए हे @ ईडीडी धन्यवाद, लेकिन " मैं इंटर्जर को केवल उसी तरह चाहता था जैसे मैं मुद्रा के लिए NSNumberFormatter वर्ग में प्रवेश कर रहा हूं"।
स्विफ्टबॉय

1
खैर इस मामले में आप उपयोग कर सकते हैं Double() तो का उपयोग Int()। इस तरह: if let d = Double("700.00") { let i = Int(d); print (i) }:)
एरिक आया

2

आप स्ट्रिंग से NSString तक पुल कर सकते हैं और CInt से इसे इस तरह बदल सकते हैं:

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)

1

मैंने उस उद्देश्य के लिए एक विस्तार लिखा। यह हमेशा एक रिटर्न देता है Int। यदि स्ट्रिंग एक में फिट नहीं होती है Int, तो 0 लौटा दी जाती है।

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}

2
यह अधिक संक्षिप्त रूप में लिखा जा सकता है return self.toInt() ?? 0। शायद यह बेहतर है कि इसके लिए एक विस्तार विधि होने के बजाय इसे केवल इस तरह से लिखें।
जंल ६४६

0

एक अधिक सामान्य समाधान एक विस्तार हो सकता है

extension String {
    var toFloat:Float {
        return Float(self.bridgeToObjectiveC().floatValue)
    }
    var toDouble:Double {
        ....
    }
    ....
}

उदाहरण के लिए यह तेजी से देशी स्ट्रिंग वस्तु का विस्तार करता है


0

स्विफ्ट 2.0 में स्ट्रिंग को इंट में बदलें:

var str:NSString = Data as! NSString
var cont:Int = str.integerValue

उपयोग .intergerValue or intValue for Int32


0

8: 1 ऑड्स (*)

var stringNumb: String = "1357"
var someNumb = Int(stringNumb)

या

var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)

Int(String)एक वैकल्पिक लौटाता है, ए Int?नहीं Int


सुरक्षित उपयोग: स्पष्ट रूप से खोलना नहीं है

let unwrapped:Int = Int(stringNumb) ?? 0

या

if let stringNumb:Int = stringNumb { ... }

(*) कोई भी जवाब वास्तव में संबोधित नहीं किया var someNumb: Int = Int(stringNumb)गया था कि क्यों काम नहीं कर रहा था।


शुक्रिया @ user3441734 मुझे कास्टिंग का इस्तेमाल नहीं करना चाहिए था ।
स्विफ्टआर्किटेक्ट

0

सरल लेकिन गंदा तरीका

// Swift 1.2
if let intValue = "42".toInt() {
    let number1 = NSNumber(integer:intValue)
}
// Swift 2.0
let number2 = Int(stringNumber)

// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)

विस्तार-मार्ग

यह बेहतर है, वास्तव में, क्योंकि यह अच्छी तरह से स्थानों और दशमलव के साथ खेलेंगे।

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.numberFromString(self)
    }
}

अब आप बस कर सकते हैं:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.