web-dev-qa-db-ja.com

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
318
Marwan Qasem

基本的な考え、 これはSwift 1.xでしか機能しないことに注意してください ParaSaraの答えをチェックしてください /それがSwift 2.xでどのように機能するかを見るために):

    // 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"
    }

Swift 4用のアップデート

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

Swift 2.0へのアップデート回答

toInt()メソッドにエラーが発生しました。 Swift 2.xでは、.toInt()関数がStringから削除されたためです。これに代わるものとして、Intは文字列を受け入れるイニシャライザを持っています。

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

myString.toInt() - 文字列値をintに変換します。

Swift 3.x

文字列の中に隠れている整数がある場合は、次のように整数のコンストラクタを使って変換できます。

let myInt = Int(textField.text)

他のデータ型(FloatおよびDouble)と同様に、NSStringを使用して変換することもできます。

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

Xcode 8.3.2•Swift 3.1

class IntegerField: UITextField {
    var integer: Int {
        return string.digits.integer
    }
    override func willMove(toSuperview newSuperview: UIView?) {
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        keyboardType = .numberPad
        textAlignment = .right
        editingChanged()
    }
    func editingChanged() {
        text = Formatter.decimal.string(for: integer)
        print(integer)
    }
}

必要な拡張子、構造体、初期化子

extension Sequence where Iterator.Element == UnicodeScalar {
    var string: String { return String(String.UnicodeScalarView(self)) }
}

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

extension UITextField {
    var string: String { return text ?? "" }
}

extension String {
    private static var digitsPattern = UnicodeScalar("0")..."9"
    var digits: String {
        return unicodeScalars.filter { String.digitsPattern ~= $0 }.string
    }
    var integer: Int { return Int(self) ?? 0 }
}

extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}
31
Leo Dabus

あなたは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
     }
23
Abaho Katabarwa

Swift 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 
  }
19
OOMMEN

// Xcode 8.1とSwift 3.0

私達はまた任意結合によってそれを扱うことができます

let occur = "10"

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

    }
14
Pankaj Nigam

スイフト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
torcelly

Swift 4では:

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

Swift 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)
5
iOS

私はあなたが入力フォームを取る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
AliRaza Qureshi

Swift 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
}

使用法: 上記の関数をコードに追加し、変換するにはmyStringに数値または文字列がある場合はlet myNumber = getNumber(number: 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

3
Koushik

最新のSwift3 このコードは単に文字列をintに変換するためのものです。

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

Int()およびSwift 2.xについて:変換後にnil値が得られる場合は、大きな数の文字列を変換しようとしているかどうか(例えば、1073741824)を確認してください。

let bytesInternet : Int64 = Int64(bytesInternetString)!
3

文字列には数字以外の文字が含まれる可能性があるため、操作を保護するためにguardを使用する必要があります。例:

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

useLabelInt()
2
RonTLV
//  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
Jenny

swift3.x用

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

これを使って:

// 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"
    }

OR

あなたのXIBまたはストーリーボードからあなたのUITextField KeyboardTypeをDecimalTabにして、どんな計算をするためのどんなif条件でも取り除きます。

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

キーボードの種類がDecimalPadなので、他の0-9またはを入力することはできません。

この助けを願っています!

Swift 2.xでは、 .toInt() 関数がStringから削除されました。代わりに、IntはString を受け付けるイニシャライザを持っています。

Int(myString)

あなたのケースでは、textField.text!.toInt()にインクルードされたInt(textField.text!)を使うことができます

Swift 1.x

let myString: String = "256"
let myInt: Int? = myString.toInt()

Swift 2.x、3.x

let myString: String = "256"
let myInt: Int? = Int(myString)
1
Azarmanesh

これは私のために働く

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

Intから他の型への文字列に便利

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
0
Viral Savaliya

質問:文字列 "4.0000"はInt( "4.000")を使用して整数に変換できませんか?

回答:Int()のチェック文字列が整数であるか、そうでない場合は整数、そうでない場合はnilを返します。しかし、FloatまたはDoubleは、nilを指定せずに、任意の数値ストリングをそれぞれのFloatまたはDoubleに変換できます。 "45"の整数文字列があるのにFloat( "45")を使用すると45.0の浮動小数点値、Double( "4567")を使用すると45.0となる場合の例.

解決策:NSString(string: "45.000")。integerValueまたはInt(Float( "45.000")!)!正しい結果を得るために。

0
Ravi Kumar

私の解決策は、文字列からintへの変換のための一般的な拡張をすることです。

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
flame3

Swift 5.0以降

作業中

Stringを分割する場合、2つのsubstringsではなく、2つのStringsを作成します。以下のメソッドは、Anyをチェックし、t0 NSNumberに変換します。NSNumberIntFloatに簡単に変換できます。

実際のコード

//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
Koushik

Swift 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
0
Sam B

代替ソリューション用。あなたは拡張をネイティブ型として使うことができます。あなたは遊び場でテストすることができます。

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

"2" .add(1)

0
Durul Dalkanat
@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
Krunal

SwiftのIntには、Stringを受け入れるイニシャライザが含まれています。それはオプションのIntを返しますか?文字列に数字が含まれていないと変換が失敗する可能性があるためです。

If letステートメントを使用することで、変換が成功したかどうかを検証できます。

それであなたのコードは次のようになります。

@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
Patrick

私は最近同じ問題を抱えています。以下の解決策は私のために働きます:

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