स्ट्रिंग को इंट में स्विफ्ट के साथ परिवर्तित करना


352

एप्लिकेशन मूल रूप से प्रारंभिक और अंतिम वेग और समय को इनपुट करके त्वरण की गणना करता है और फिर त्वरण की गणना करने के लिए एक सूत्र का उपयोग करता है। हालाँकि, चूंकि टेक्स्ट बॉक्स में मान स्ट्रिंग हैं, इसलिए मैं उन्हें पूर्णांक में बदलने में असमर्थ हूं।

@IBOutlet var txtBox1 : UITextField
@IBOutlet var txtBox2 : UITextField
@IBOutlet var txtBox3 : UITextField
@IBOutlet var lblAnswer : UILabel


@IBAction func btn1(sender : AnyObject) {

    let answer1 = "The acceleration is"
    var answer2 = txtBox1
    var answer3 = txtBox2
    var answer4 = txtBox3

7
कोशिश नहीं की, लेकिन हो सकता है कि आप मानों को डाल सकते हैं जैसेvar answer1 = Int(txtBox1.text)
डैनियल

यदि आप स्ट्रिंग को "23.0" मान रहे हैं, तो यदि आप इसे इंट ("23.0") में डालते हैं, तो यह शून्य पर वापस आ जाएगा, इस स्थिति के लिए आपको पहले डबल / फ्लोट पर कास्ट करना होगा और फिर इंट में डालना होगा।
एरियन नादर

जवाबों:


326

बेसिक आइडिया, ध्यान दें कि यह केवल स्विफ्ट 1.x में काम करता है ( यह देखने के लिए कि यह स्विफ्ट 2 में कैसे काम करता है, पैरासारा का जवाब देखें):

    // toInt returns optional that's why we used a:Int?
    let a:Int? = firstText.text.toInt() // firstText is UITextField
    let b:Int? = secondText.text.toInt() // secondText is UITextField

    // check a and b before unwrapping using !
    if a && b {
        var ans = a! + b!
        answerLabel.text = "Answer is \(ans)" // answerLabel ie UILabel
    } else {
        answerLabel.text = "Input values are not numeric"
    }

स्विफ्ट 4 के लिए अपडेट

...
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
...

इस काम के लिए धन्यवाद। हालाँकि, मेरे पास एक मुद्दा है क्योंकि मैं चाहता हूं कि संख्याओं में फ़्लोट्स भी शामिल हों। एक बार फिर धन्यवाद।
मारवान कासेम

4
यदि आपको फ्लोट्स की आवश्यकता है (और आप वास्तव में डबल चाहते हैं, फ्लोट नहीं), तो टिंट () ऐसा नहीं करेगा। क्या आप एक उपयुक्त फ़ंक्शन खोजने के लिए अपनी कल्पना और उपलब्ध दस्तावेज का उपयोग कर सकते हैं?
gnasher729

4
मुझे मिलता है 'NSString' does not have a member named 'toInt'। कोई विचार?
मतज

1
NSStringऔर Stringदो अलग-अलग ऑब्जेक्ट हैं और अलग-अलग तरीके हैं। NSStringएक विधि है जिसका नाम है.intValue
बायरन कोएत्से

7
यह समाधान केवल स्विफ्ट के लिए सही था और स्विफ्ट 2 के लिए नहीं। अब आपको उपयोग करना चाहिए: Int (firstText.text)
gurehbgui

337

स्विफ्ट 2.0 के लिए अद्यतन उत्तर :

toInt()पद्धति को एक त्रुटि दी गई है। क्योंकि, स्विफ्ट 2.x में, .toInt()समारोह को स्ट्रिंग से हटा दिया गया था। प्रतिस्थापन में, Int में अब एक इनिशियलाइज़र है जो स्ट्रिंग को स्वीकार करता है:

let a:Int? = Int(firstText.text)     // firstText is UITextField  
let b:Int? = Int(secondText.text)   // secondText is UITextField

क्या मैं पूछ सकता हूँ कि जब मैं 'को छोड़ता हूँ तो मुझे एक त्रुटि क्यों हो रही है? चार? मुझे वैकल्पिक के रूप में 'a' बताने की आवश्यकता क्यों है?
मानोस सेरिफ़ियोस

1
@ManosSerifios यह चर्चा सहायक हो सकती है: stackoverflow.com/questions/32621022/…
Paraneetharan Saravanaperumal

वास्तव में संबंधित नहीं है, लेकिन इंट्रो टू स्ट्रिंग्स के लिए निर्माता दृष्टिकोण हमेशा पसंद किया जाता है और अधिक पठनीय होता है। "\(someInt)"अच्छा String(someInt)है पढ़ने में ज्यादा आसान नहीं है
Honey

मैं मुद्रण कर रहा हूं Int(firstText.text)!और फिर मैं अभी भी वैकल्पिक देख रहा हूं। क्यों? क्या मैंने इसे अलिखित नहीं किया है?
हनी

यह स्ट्रिंग होने पर क्रैश हो जाएगा nil। जब स्ट्रिंग इस मामले में UI तत्व से आती है तो ऐसा नहीं हो सकता है। लेकिन दुर्घटना को रोकने का एक तरीका स्ट्रिंग में एक डिफ़ॉल्ट मान जोड़ना है let a:Int? = Int(firstText.text ?? ""):।
जेन्स

85

myString.toInt() - स्ट्रिंग मान को इंट में बदलें।

स्विफ्ट 3.x

यदि आपके पास एक स्ट्रिंग के अंदर एक पूर्णांक छिपा हुआ है, तो आप पूर्णांक के निर्माणकर्ता का उपयोग कर सकते हैं, जैसे:

let myInt = Int(textField.text)

अन्य डेटा प्रकारों (फ्लोट और डबल) के साथ आप NSString का उपयोग करके भी परिवर्तित कर सकते हैं:

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

1
यह वास्तव में इस सवाल का जवाब देता है, अन्य सभी ओपी को एक स्ट्रिंग के रूप में एक
इंटेगर

1
स्विफ्ट 3 के लिए उदाहरण?
बजे पीटर क्रिनज़

pls स्पष्टता के लिए "नवीनतम स्विफ्ट संस्करण" स्पष्ट करें भ्रम की कमी :)
एलेक्स हॉल

@aremvee का अर्थ है "कास्ट" को एक स्ट्रिंग के रूप में पूर्णांक? और यह वास्तव में क्या करता है जो उस प्रश्न का उत्तर देता है जो अन्य उत्तर नहीं देते हैं?
एलेक्स हॉल

31

संपादन / अद्यतन: Xcode 11.4 • स्विफ्ट 5.2

कृपया कोड के माध्यम से टिप्पणियों की जांच करें


IntegerField.swift फ़ाइल सामग्री:

import UIKit

class IntegerField: UITextField {

    // returns the textfield contents, removes non digit characters and converts the result to an integer value
    var value: Int { string.digits.integer ?? 0 }

    var maxValue: Int = 999_999_999
    private var lastValue: Int = 0

    override func willMove(toSuperview newSuperview: UIView?) {
        // adds a target to the textfield to monitor when the text changes
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        // sets the keyboard type to digits only
        keyboardType = .numberPad
        // set the text alignment to right
        textAlignment = .right
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    // deletes the last digit of the text field
    override func deleteBackward() {
        // note that the field text property default value is an empty string so force unwrap its value is safe
        // note also that collection remove at requires a non empty collection which is true as well in this case so no need to check if the collection is not empty.
        text!.remove(at: text!.index(before: text!.endIndex))
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    @objc func editingChanged() {
        guard value <= maxValue else {
            text = Formatter.decimal.string(for: lastValue)
            return
        }
        // This will format the textfield respecting the user device locale and settings
        text = Formatter.decimal.string(for: value)
        print("Value:", value)
        lastValue = value
    }
}

आपको अपनी परियोजना में उन एक्सटेंशनों को भी जोड़ना होगा:


एक्सटेंशन UITextField.swift फ़ाइल सामग्री:

import UIKit
extension UITextField {
    var string: String { text ?? "" }
}

एक्सटेंशन फॉर्मैटर.वैक्स फ़ाइल सामग्री:

import Foundation
extension Formatter {
    static let decimal = NumberFormatter(numberStyle: .decimal)
}

एक्सटेंशन नंबरफ़ॉर्मर.स्विफ़्ट फ़ाइल सामग्री:

import Foundation
extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}

एक्सटेंशन StringProtocol.swift फ़ाइल सामग्री:

extension StringProtocol where Self: RangeReplaceableCollection {
    var digits: Self { filter(\.isWholeNumber) }
    var integer: Int? { Int(self) }
}

नमूना परियोजना


27

आप उपयोग कर सकते हैं NSNumberFormatter().numberFromString(yourNumberString)। यह बहुत अच्छा है क्योंकि यह एक वैकल्पिक रिटर्न देता है जिसे आप if letनिर्धारित कर सकते हैं कि रूपांतरण सफल रहा है या नहीं। जैसे।

var myString = "\(10)"
if let myNumber = NSNumberFormatter().numberFromString(myString) {
    var myInt = myNumber.integerValue
    // do what you need to do with myInt
} else {
    // what ever error code you need to write
}

स्विफ्ट 5

var myString = "\(10)"
if let myNumber = NumberFormatter().number(from: myString) {
    var myInt = myNumber.intValue
    // do what you need to do with myInt
  } else {
    // what ever error code you need to write
  }

1
मैंने अभी इसे 'myNumber.integerValue' में बदल दिया है क्योंकि Xcode 7 'intValue' के साथ नहीं बनेगा। उत्तरार्द्ध Int32 मूल्य का है
ब्रेनर्रे

21

तेज 4.0

let stringNumber = "123"
let number = Int(stringNumber) //here number is of type "Int?"


//using Forced Unwrapping

if number != nil {         
 //string is converted to Int
}

आप बाध्य बाइंडिंग के अलावा वैकल्पिक बाइंडिंग का भी उपयोग कर सकते हैं।

उदाहरण के लिए:

  if let number = Int(stringNumber) { 
   // number is of type Int 
  }

14

// Xcode 8.1 और स्विफ्ट 3.0

हम इसे Optional बाइंडिंग, सिंपली से भी हैंडल कर सकते हैं

let occur = "10"

if let occ = Int(occur) {
        print("By optional binding :", occ*2) // 20

    }

11

में स्विफ्ट 4.2 और Xcode 10.1

let string:String = "789"
let intValue:Int = Int(string)!
print(intValue)

let integerValue:Int = 789
let stringValue:String = String(integerValue)
    //OR
//let stringValue:String = "\(integerValue)"
print(stringValue)

7

स्विफ्ट 3

सबसे सरल और अधिक सुरक्षित तरीका है:

@IBOutlet var textFieldA  : UITextField
@IBOutlet var textFieldB  : UITextField
@IBOutlet var answerLabel : UILabel

@IBAction func calculate(sender : AnyObject) {

      if let intValueA = Int(textFieldA),
            let intValueB = Int(textFieldB) {
            let result = intValueA + intValueB
            answerLabel.text = "The acceleration is \(result)"
      }
      else {
             answerLabel.text = "The value \(intValueA) and/or \(intValueB) are not a valid integer value"
      }        
}

नंबर पैड पर कीबोर्ड प्रकार सेट करने वाले अमान्य मानों से बचें:

 textFieldA.keyboardType = .numberPad
 textFieldB.keyboardType = .numberPad

7

स्विफ्ट 4 में:

extension String {            
    var numberValue:NSNumber? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        return formatter.number(from: self)
    }
}
let someFloat = "12".numberValue

4

मैंने एक सरल प्रोग्राम बनाया है, जहाँ आपके पास 2 txt फ़ील्ड हैं जो आप उपयोगकर्ता के लिए इनपुट फॉर्म लेते हैं और उन्हें जोड़ते हैं, यह समझने के लिए कि कृपया नीचे दिए गए कोड को समझें।

@IBOutlet weak var result: UILabel!
@IBOutlet weak var one: UITextField!
@IBOutlet weak var two: UITextField!

@IBAction func add(sender: AnyObject) {        
    let count = Int(one.text!)
    let cal = Int(two.text!)
    let sum = count! + cal!
    result.text = "Sum is \(sum)"
}

उम्मीद है की यह मदद करेगा।


4

स्विफ्ट 3.0

इसे आज़माएं, आपको किसी भी स्थिति की जांच करने की ज़रूरत नहीं है जो मैंने सब कुछ किया है बस इस फ़ंक्शन का उपयोग करें। कुछ भी स्ट्रिंग, संख्या, फ्लोट, डबल, आदि भेजें। आपको मान के रूप में एक संख्या मिलती है या 0 यदि यह आपके मूल्य को बदलने में असमर्थ है

समारोह:

func getNumber(number: Any?) -> NSNumber {
    guard let statusNumber:NSNumber = number as? NSNumber else
    {
        guard let statString:String = number as? String else
        {
            return 0
        }
        if let myInteger = Int(statString)
        {
            return NSNumber(value:myInteger)
        }
        else{
            return 0
        }
    }
    return statusNumber
}

उपयोग: उपरोक्त फ़ंक्शन को कोड में जोड़ें और यह उपयोग करने के लिए let myNumber = getNumber(number: myString) कि यदि myStringसंख्या या स्ट्रिंग है तो वह उस नंबर को लौटाता है जो इसे वापस करता है0

उदाहरण 1:

let number:String = "9834"
print("printing number \(getNumber(number: number))")

आउटपुट: printing number 9834

उदाहरण 2:

let number:Double = 9834
print("printing number \(getNumber(number: number))")

आउटपुट: printing number 9834

उदाहरण 3:

let number = 9834
print("printing number \(getNumber(number: number))")

आउटपुट: printing number 9834


4

स्ट्रिंग टू इंट और अन्य प्रकार के लिए उपयोगी है

extension String {
        //Converts String to Int
        public func toInt() -> Int? {
            if let num = NumberFormatter().number(from: self) {
                return num.intValue
            } else {
                return nil
            }
        }

        //Converts String to Double
        public func toDouble() -> Double? {
            if let num = NumberFormatter().number(from: self) {
                return num.doubleValue
            } else {
                return nil
            }
        }

        /// EZSE: Converts String to Float
        public func toFloat() -> Float? {
            if let num = NumberFormatter().number(from: self) {
                return num.floatValue
            } else {
                return nil
            }
        }

        //Converts String to Bool
        public func toBool() -> Bool? {
            return (self as NSString).boolValue
        }
    }

इसका उपयोग करें जैसे:

"123".toInt() // 123

3

Int () और स्विफ्ट 2.x के बारे में: यदि आप एक बड़ी संख्या के साथ स्ट्रिंग को बदलने की कोशिश करते हैं तो रूपांतरण जांच के बाद एक शून्य मान प्राप्त होता है (उदाहरण के लिए: 1073741824), इस मामले में प्रयास करें:

let bytesInternet : Int64 = Int64(bytesInternetString)!

1
शुक्रिया यह मेरे मामले के लिए काम किया। Int () मेरे लिए 16 अंकों की संख्या के साथ काम कर रहा था लेकिन हाल ही में विफल होने लगा।
रेयान बोयड

3

नवीनतम स्विफ्ट 3 यह कोड केवल स्ट्रिंग को इंट में बदलने के लिए है

let myString = "556"
let myInt = Int(myString)

2

क्योंकि एक स्ट्रिंग में गैर-संख्यात्मक अक्षर शामिल हो सकते हैं guardजिन्हें आपको ऑपरेशन की सुरक्षा के लिए उपयोग करना चाहिए । उदाहरण:

guard let labelInt:Int = Int(labelString) else {
    return
}

useLabelInt()

2

मुझे हाल ही में एक ही मुद्दा मिला है। नीचे समाधान मेरे लिए काम कर रहा है:

        let strValue = "123"
        let result = (strValue as NSString).integerValue

1

इसे इस्तेमाल करो:

// get the values from text boxes
    let a:Double = firstText.text.bridgeToObjectiveC().doubleValue
    let b:Double = secondText.text.bridgeToObjectiveC().doubleValue

//  we checking against 0.0, because above function return 0.0 if it gets failed to convert
    if (a != 0.0) && (b != 0.0) {
        var ans = a + b
        answerLabel.text = "Answer is \(ans)"
    } else {
        answerLabel.text = "Input values are not numberic"
    }

या

अपने XIB या स्टोरीबोर्ड से अपने UITextField KeyboardType को DecimalTab के रूप में बनाएं, और यदि कोई गणना करने के लिए शर्त को हटा दें, अर्थात।

var ans = a + b
answerLabel.text = "Answer is \(ans)"

क्योंकि कीबोर्ड का प्रकार DecimalPad है इसलिए अन्य 0-9 या में प्रवेश करने का कोई मौका नहीं है।

उममीद है कि इससे मदद मिलेगी !!


1
//  To convert user input (i.e string) to int for calculation.I did this , and it works.


    let num:Int? = Int(firstTextField.text!);

    let sum:Int = num!-2

    print(sum);

1

यह मेरे लिए काम करता है

var a:Int? = Int(userInput.text!)

यह टिप्पणी में दिए गए समाधान से कैसे भिन्न है?
प्रून

2
टिप्पणी में दिया गया समाधान गायब है "!" अंत में, जो स्विफ्ट 2 और उसके बाद की उम्मीद है
Naishta

1

Swift3.x के लिए

extension String {
    func toInt(defaultValue: Int) -> Int {
        if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) {
            return n
        } else {
            return defaultValue
        }
    }
}

0

वैकल्पिक समाधान के लिए। आप एक देशी प्रकार के एक्सटेंशन का उपयोग कर सकते हैं। आप खेल के मैदान के साथ परीक्षण कर सकते हैं।

extension String {
    func add(a: Int) -> Int? {
        if let b = Int(self) {
            return b + a
        }
        else {
            return nil
        }
    }     
}

"2" .add (1)


0

मेरा समाधान स्ट्रिंग के लिए सामान्य रूपांतरण के लिए एक सामान्य विस्तार करना है।

extension String {

 // default: it is a number suitable for your project if the string is not an integer

    func toInt(default: Int) -> Int {
        if let result = Int(self) {
            return result
        }
        else {
            return default  
        }
    }

}

0
@IBAction func calculateAclr(_ sender: Any) {
    if let addition = addition(arrayString: [txtBox1.text, txtBox2.text, txtBox3.text]) {
      print("Answer = \(addition)")
      lblAnswer.text = "\(addition)"
    }
}

func addition(arrayString: [Any?]) -> Int? {

    var answer:Int?
    for arrayElement in arrayString {
        if let stringValue = arrayElement, let intValue = Int(stringValue)  {
            answer = (answer ?? 0) + intValue
        }
    }

    return answer
}

0

प्रश्न: स्ट्रिंग "4.0000" को इंट ("4.000") का उपयोग करके पूर्णांक में परिवर्तित नहीं किया जा सकता है?

उत्तर: इंट () चेक स्ट्रिंग पूर्णांक है या नहीं यदि हां तो आपको पूर्णांक और अन्यथा शून्य दें। लेकिन फ्लोट या डबल किसी भी नंबर स्ट्रिंग को संबंधित फ्लोट या डबल में बिना शून्य दिए कन्वर्ट कर सकते हैं। उदाहरण यदि आपके पास "45" पूर्णांक स्ट्रिंग है, लेकिन फ्लोट ("45") का उपयोग करने से आपको 45.0 फ्लोट मान मिलता है या डबल ("4567") का उपयोग करके आपको 45.0 मिलता है।

समाधान: एनएसएसट्रिंग (स्ट्रिंग: "45.000")। पूर्णांकवैल्यू या इंट (फ्लोट ("सीईआरटी")!)। सही परिणाम प्राप्त करने के लिए।


0

एक Int in Swift में एक इनिशियलाइज़र होता है जो एक स्ट्रिंग को स्वीकार करता है। यह एक वैकल्पिक Int देता है? यदि स्ट्रिंग में कोई संख्या नहीं है, तो रूपांतरण विफल हो सकता है।

यदि आप कथन का उपयोग करते हैं तो आप यह पुष्टि कर सकते हैं कि रूपांतरण सफल हुआ या नहीं।

तो आपका कोड कुछ इस तरह बन जाता है:

@IBOutlet var txtBox1 : UITextField
@IBOutlet var txtBox2 : UITextField
@IBOutlet var txtBox3 : UITextField
@IBOutlet var lblAnswer : UILabel

@IBAction func btn1(sender : AnyObject) {

    let answer1 = "The acceleration is"
    var answer2 = txtBox1
    var answer3 = txtBox2
    var answer4 = txtBox3

    if let intAnswer = Int(txtBox1.text) {
      // Correctly converted
    }
}

0

स्विफ्ट 5.0 और उससे ऊपर

काम कर रहे

मामले में यदि आप बंटवारे कर रहे हैं तो Stringयह दो substringsनहीं बल्कि दो बनाता है Strings। यह नीचे विधि के लिए जाँच करेगा Anyऔर इसे परिवर्तित करने के लिए t0 NSNumberको बदलने में आसान NSNumberहै Int, Floatजो कभी भी आपको डेटा प्रकार की आवश्यकता है।

वास्तविक कोड

//Convert Any To Number Object Removing Optional Key Word.
public func getNumber(number: Any) -> NSNumber{
 guard let statusNumber:NSNumber = number as? NSNumber  else {
    guard let statString:String = number as? String else {
        guard let statSubStr : Substring = number as? Substring else {
            return 0
        }
        if let myInteger = Int(statSubStr) {
            return NSNumber(value:myInteger)
        }
        else{
            return 0
        }
    }

    if let myInteger = Int(statString) {
        return NSNumber(value:myInteger)
    }
    else if let myFloat = Float(statString) {
        return NSNumber(value:myFloat)
    }else {
        return 0
    }
}
return statusNumber }

प्रयोग

if let hourVal = getNumber(number: hourStr) as? Int {

}

Stringजाँच और परिवर्तित करने के लिए पासिंगDouble

Double(getNumber(number:  dict["OUT"] ?? 0)

0

स्विफ्ट 5 फ्लोट या इंट स्ट्रिंग टू इंट:

extension String {
    func convertStringToInt() -> Int {
        return Int(Double(self) ?? 0.0)
    }
}

let doubleStr = "4.2"
// print 4
print(doubleStr.convertStringToInt())

let intStr = "4"
// print 4
print(intStr.convertStringToInt())

-1

स्विफ्ट 3 के रूप में , मुझे अपना #% @ मजबूर करना होगा! स्ट्रिंग और int एक "के साथ!" अन्यथा यह सिर्फ काम नहीं करता है।

उदाहरण के लिए:

let prefs = UserDefaults.standard
var counter: String!
counter = prefs.string(forKey:"counter")
print("counter: \(counter!)")


var counterInt = Int(counter!)
counterInt = counterInt! + 1
print("counterInt: \(counterInt!)")

OUTPUT:
counter: 1
counterInt: 2

तुम बस नहीं कर सकते var counterInt = counter.map { Int($0) }? कहाँ counterएक हो whouldString?
मार्टिन

@ मर्तिन - नहीं? इसे वैकल्पिक बनाता है और इस प्रकार काउंटर स्ट्रिंग में "वैकल्पिक" शब्द जोड़ता है।
सैम बी

IMHO, आपको अपने वैकल्पिक को खोलना नहीं चाहिए। उपयोग guardऔर if letबयानों को प्राथमिकता दें
मार्टिन

-1

कन्वर्ट स्ट्रिंग को स्विफ्ट 4 में इंटेगर में परिवर्तित करें

let strValue:String = "100"
let intValue = strValue as! Int
var intValueFromString:Int = strValue as! Int
or
var intValueFromString = Int(strValue)!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.