Ios 使用Swift将字符串转换为Int
该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式来计算加速度。但是,由于文本框中的值是字符串,我无法将它们转换为整数Ios 使用Swift将字符串转换为Int,ios,swift,int,uitextfield,Ios,Swift,Int,Uitextfield,该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式来计算加速度。但是,由于文本框中的值是字符串,我无法将它们转换为整数 @IBOutlet var txtBox1 : UITextField @IBOutlet var txtBox2 : UITextField @IBOutlet var txtBox3 : UITextField @IBOutlet var lblAnswer : UILabel @IBAction func btn1(sender : AnyObje
@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 1.x(请查看它在Swift 2.x中的工作原理): Swift 4的更新
...
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
...
使用以下命令:
// 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键盘类型设置为DecimalTab,并删除进行任何计算的任何if条件,即
var ans = a + b
answerLabel.text = "Answer is \(ans)"
由于键盘类型为十进制,因此没有机会输入其他0-9或
希望这有帮助 您可以使用
NSNumberFormatter().numberFromString(yourNumberString)
。这很好,因为它返回了一个可选值,您可以使用if let
测试该值,以确定转换是否成功。
例如
斯威夫特5
var myString=“\(10)”
如果让myNumber=NumberFormatter().number(from:myString){
var myInt=myNumber.intValue
//使用myInt执行您需要执行的操作
}否则{
//您需要编写什么错误代码
}
Swift 2.0+的更新答案:
toInt()
方法给出了一个错误,因为它是从Swift 2.x中的String
中删除的。相反,Int
类型现在有一个接受字符串的初始值设定项
:
let a: Int? = Int(firstTextField.text)
let b: Int? = Int(secondTextField.text)
这对我有用
var a:Int? = Int(userInput.text!)
关于int()和Swift 2.x:如果转换后得到一个nil值,请检查是否尝试转换一个带有大数字的字符串(例如:1073741824),在本例中,请尝试:
let bytesInternet : Int64 = Int64(bytesInternetString)!
编辑/更新: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
}
}
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
}
}
extension StringProtocol where Self: RangeReplaceableCollection {
var digits: Self { filter(\.isWholeNumber) }
var integer: Int? { Int(self) }
}
扩展名格式化程序.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
}
}
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
}
}
extension StringProtocol where Self: RangeReplaceableCollection {
var digits: Self { filter(\.isWholeNumber) }
var integer: Int? { Int(self) }
}
扩展名NumberFormatter.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
}
}
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
}
}
extension StringProtocol where Self: RangeReplaceableCollection {
var digits: Self { filter(\.isWholeNumber) }
var integer: Int? { Int(self) }
}
扩展StringProtocol.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
}
}
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
}
}
extension StringProtocol where Self: RangeReplaceableCollection {
var digits: Self { filter(\.isWholeNumber) }
var integer: Int? { Int(self) }
}
我制作了一个简单的程序,其中有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)"
}
希望这有帮助。了解替代解决方案。您可以将扩展名用于本机类型。你可以在操场上测试
extension String {
func add(a: Int) -> Int? {
if let b = Int(self) {
return b + a
}
else {
return nil
}
}
}
“2.添加(1)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
//Xcode 8.1和swift 3.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
}
我们也可以通过可选绑定来处理它,只需
let occur = "10"
if let occ = Int(occur) {
print("By optional binding :", occ*2) // 20
}
我的解决方案是为字符串到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
}
}
}
Swift 3.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
}
试试这个,你不需要检查任何条件,我已经做了一切,只需使用这个函数。发送任何字符串、数字、浮点、双精度等,。您将获得一个数字作为值,如果无法转换您的值,则为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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
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())
用法:
在代码中添加上述函数并转换使用
让myNumber=getNumber(number:myString)
如果myString
有一个数字或字符串,则返回该数字,否则返回0
示例1:
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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
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())
输出:打印号码9834
示例2:
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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
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())
输出:打印号码9834
示例3:
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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
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())
输出:
打印号码9834
最新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
}
}
}
在Swift 4中:
extension String {
var numberValue:NSNumber? {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self)
}
}
let someFloat = "12".numberValue
从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
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
}
您还可以使用强制绑定以外的可选绑定
例如:
问题:字符串“4.0000”不能使用Int(“4.000”)转换为整数
回答:Int()检查字符串是否为整数,如果是,则为整数,否则为零。但Float或Double可以将任何数字字符串转换为相应的Float或Double,而不给出nil。例如,如果您有“45”整数字符串,但使用Float(“45”)得到45.0浮点值,或者使用Double(“4567”)得到45.0浮点值
解决方案:NSString(字符串:“45.000”)。integerValue或Int(Float(“45.000”)!要获得正确的结果。因为字符串可能包含非数字字符,所以应该使用
保护
来保护操作。例如:
guard let labelInt:Int = Int(labelString) else {
return
}
useLabelInt()
我最近也收到了同样的问题。以下解决方案适合我:
let strValue = "123"
let result = (strValue as NSString).integerValue
在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)
在Swift 4中将字符串值转换为整数
Swift中的Int包含接受字符串的初始值设定项。它返回一个可选的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
}
}
用于字符串到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
Swift 5.0及以上版本 工作 如果要拆分
字符串
,则会创建两个子字符串
,而不是两个字符串
。下面的方法将检查Any
,并将其转换为NSNumber
它很容易将NSNumber
转换为Int
,Float
您需要的任何数据类型
实际代码
用法
传递String
以检查并转换为Double
Double(getNumber(number: dict["OUT"] ?? 0)
Swift5浮点或整数字符串到整数:
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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
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())
我还没试过,但也许你可以