@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
#1 楼
基本概念,请注意,这仅在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
...
评论
谢谢你的作品。但是,我有一个问题,因为我也希望数字也包含浮点数。再次感谢。
– Marwan Qasem
2014年6月12日18:15
如果您需要浮点数(并且您确实真的想要Double,而不是浮点数),则toInt()不会这样做。您能否利用您的想象力和可用的文档来找到合适的功能?
– gnasher729
14年6月13日在7:18
我得到“ NSString”没有名为“ toInt”的成员。有任何想法吗?
–马泰
2014年11月4日,11:16
NSString和String是两个不同的对象,并且具有不同的方法。 NSString有一个称为.intValue的方法
–拜伦·库茨(Byron Coetsee)
15年1月22日在12:24
此解决方案仅适用于Swift,不适用于Swift2。现在您应该使用:Int(firstText.text)
– gurehbgui
2015年9月27日在10:36
#2 楼
Swift 2.0+的更新答案:toInt()
方法给出了错误,因为它已从Swift 2.x中的String
中删除。相反,Int
类型现在具有一个接受String
的初始化程序:let a: Int? = Int(firstTextField.text)
let b: Int? = Int(secondTextField.text)
评论
我可以问为什么我省略'时会出错吗?炭?为什么我需要声明“ a”为可选?
– Manos Serifios
16年6月2日在20:16
@ManosSerifios的讨论可能会有所帮助:stackoverflow.com/questions/32621022/…
– Paraaneetharan Saravanaperumal
16年3月3日在5:36
并不是真正相关的,但是对于Int to Strings而言,构造方法始终是首选并且更具可读性。 “ \(someInt)”不好String(someInt)更容易阅读
–蜂蜜
16-09-30在16:09
我正在打印Int(firstText.text)!然后我仍然看到可选的为什么?我没有拆开吗?
–蜂蜜
16年11月22日在17:50
字符串为nil时,这将崩溃。当字符串来自UI元素(在这种情况下)时,可能不会发生。但是,防止崩溃的一种方法是在字符串中添加默认值:let a:Int? = Int(firstText.text ??“”)。
–詹斯
17年12月8日在14:14
#3 楼
myString.toInt()
-将字符串值转换为int。Swift 3.x
如果字符串中隐藏了整数,则可以使用整数的构造函数进行转换,如下所示:
let myInt = Int(textField.text)
与其他数据类型(浮点和双精度)一样,您也可以使用NSString进行转换:
let myString = "556"
let myInt = (myString as NSString).integerValue
评论
这实际上回答了这个问题,其他所有人都告诉OP如何将Integer作为String进行惯性运动,这不是他要的。
–天堂
15年7月8日在12:19
例如Swift 3?
– Peter Kreinz
16年3月3日在10:18
请澄清“最新的Swift版本”,以防止后代感到困惑:)
–亚历克斯·霍尔
17年7月3日在21:44
@aremvee的意思是“整数”字符串吗?而这究竟是什么回答了其他答案没有的问题呢?
–亚历克斯·霍尔
17年7月3日在21:46
#4 楼
编辑/更新:Xcode 11.4•Swift 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 ?? "" }
}
扩展Formatter.swift文件内容:
import Foundation
extension Formatter {
static let decimal = NumberFormatter(numberStyle: .decimal)
}
扩展NumberFormatter.swift文件内容:
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) }
}
示例项目
#5 楼
您可以使用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
}
Swift 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
}
评论
我只是将其更改为“ myNumber.integerValue”,因为Xcode 7不会使用“ intValue”构建。后者具有Int32值
–brainray
2015年6月9日在11:39
#6 楼
swift 4.0let 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
}
#7 楼
// Xcode 8.1和swift 3.0我们也可以通过可选绑定来处理它,只需
let occur = "10"
if let occ = Int(occur) {
print("By optional binding :", occ*2) // 20
}
#8 楼
在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)
评论
关于:诠释(字符串)!如果字符串为零,诠释?可选将为nil,然后解开nil可选将导致崩溃
– jcpennypincher
6月16日,0:28
@ jcpennypincher,您能否更新答案。或发布新答案,对其他人有帮助。谢谢。
– iOS
6月30日6:30
#9 楼
Swift 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
#10 楼
在Swift 4中:extension String {
var numberValue:NSNumber? {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self)
}
}
let someFloat = "12".numberValue
#11 楼
我做了一个简单的程序,在这里您有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)"
}
希望有帮助。
#12 楼
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
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
#13 楼
对于将String转换为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
#14 楼
关于int()和Swift 2.x:如果在转换后得到nil值,请检查是否尝试转换具有大数字的字符串(例如:1073741824),在这种情况下,请尝试:let bytesInternet : Int64 = Int64(bytesInternetString)!
评论
谢谢您的协助。 Int()使用16位数字为我工作,但最近开始失败。
–瑞安·博伊德(Ryan Boyd)
16-4-30的7:03
#15 楼
最新的swift3代码只是将字符串转换为intlet myString = "556"
let myInt = Int(myString)
#16 楼
由于字符串可能包含非数字字符,因此应使用guard
保护操作。示例:guard let labelInt:Int = Int(labelString) else {
return
}
useLabelInt()
#17 楼
我最近遇到了同样的问题。以下解决方案适合我: let strValue = "123"
let result = (strValue as NSString).integerValue
#18 楼
使用此方法:// 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,并删除任何条件(进行计算)即
var ans = a + b
answerLabel.text = "Answer is \(ans)"
因为键盘类型是DecimalPad,所以没有机会输入其他0-9或。
希望有帮助!
#19 楼
// 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);
#20 楼
这对我有用var a:Int? = Int(userInput.text!)
评论
这与评论中给出的解决方案有何不同?
–修剪
2015年10月15日在22:25
评论中给出的解决方案缺少“!”最后,这将在Swift 2及更高版本中实现
– Naishta
15年10月22日在20:45
#21 楼
适用于Swift3.xextension String {
func toInt(defaultValue: Int) -> Int {
if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) {
return n
} else {
return defaultValue
}
}
}
#22 楼
Swift5将float或int字符串转换为int: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())
#23 楼
用于替代解决方案。您可以使用本机类型的扩展名。您可以在操场上进行测试。extension String {
func add(a: Int) -> Int? {
if let b = Int(self) {
return b + a
}
else {
return nil
}
}
}
“ 2” .add(1)
#24 楼
我的解决方案是对字符串到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
}
}
}
#25 楼
@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
}
#26 楼
问题:不能使用Int(“ 4.000”)将字符串“ 4.0000”转换为整数吗?答案:Int()检查字符串是否为整数,如果是,则为整数,否则为nil。但Float或Double可以将任何数字字符串转换为各自的Float或Double,而无需给出nil。例如,如果您有“ 45”整数字符串,但是使用Float(“ 45”)可以获取45.0浮点值,或者使用Double(“ 4567”)可以获取45.0。
解决方案:NSString(string:“ 45.000 “).integerValue或Int(Float(” 45.000“)!)!以获得正确的结果。
#27 楼
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
}
}
#28 楼
Swift 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)
#29 楼
从3开始,我必须强制执行#%@ !!字符串和整数带有“!”否则它将不起作用。例如:
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)}吗?计数器在哪里是字符串?
–马丁
17-10-19在16:34
@马丁-不?使其为可选,从而在计数器字符串中添加单词“ optional”。
–山姆B
17-10-19在22:27
恕我直言,您不应该强行打开可选包装。优先使用警卫和if let语句
–马丁
17-10-20在7:56
#30 楼
在Swift 4中将字符串值转换为整数let strValue:String = "100"
let intValue = strValue as! Int
var intValueFromString:Int = strValue as! Int
or
var intValueFromString = Int(strValue)!
评论
没有尝试过,但是也许您可以像var answer1 = Int(txtBox1.text)那样转换值
如果字符串假定为“ 23.0”,则如果将其强制转换为Int(“ 23.0”),它将返回nil,在这种情况下,您首先需要强制转换为Double / Float,然后再次强制转换为Int。