ios - nsinteger转int - swift4 string转int




使用Swift将字符串转换为Int (17)

该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式计算加速度。 但是,由于文本框中的值是字符串,我无法将它们转换为整数。

@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

myString.toInt() - 将字符串值转换为int。

Swift 3.x

如果你有一个隐藏在字符串中的整数,你可以使用整数的构造函数进行转换,如下所示:

let myInt = Int(textField.text)

与其他数据类型(Float和Double)一样,您也可以使用NSString进行转换:

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

在Swift 2.x中, .toInt() 函数已从String中移除。 作为替代,Int现在有一个接受String的初始化器

INT(MyString的)

在你的情况下,你可以使用int(textField.text!)insted textField.text!.toInt()

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)

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
}

用法:在代码中添加上面的函数,并使用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


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

更新回答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

最新的swift3这个代码简单地把字符串转换为int

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

为Swift3.x

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

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

关于int()和Swift 2.x:如果在转换后得到一个零值,请检查是否尝试转换一个大数字的字符串(例如:1073741824),在这种情况下,请尝试:

let bytesInternet : Int64 = Int64(bytesInternetString)!

在Swift 4中:

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

我已经做了一个简单的程序,在那里你有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)"
}

希望这可以帮助。


我最近遇到了同样的问题。 下面的解决方案适用于我:

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

替代解决方案。 您可以使用扩展本地类型。 你可以在操场上测试。

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

“2”。新增(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"
    }

要么

将您的UITextField KeyboardType作为DecimalTab从您的XIB或故事板中移除,并删除任何条件以进行任何计算,即。

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

由于键盘类型是DecimalPad,因此无法输入其他0-9或。

希望这个帮助!


这对我有用

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

问题:使用Int(“4.000”)不能将字符串“4.0000”转换为整数?

答案:Int()检查字符串是否为整数,如果是,则给你整数,否则为零。 但Float或Double可以将任何数字字符串转换为相应的Float或Double而不给零。 示例如果您有“45”整数字符串,但使用浮点数(“45”)为您提供45.0浮点值或使用Double(“4567”)为您提供45.0。

解决方案:NSString(string:“45.000”)。integerValue或Int(Float(“45.000”)!)! 得到正确的结果。


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




uitextfield