该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式计算加速度。但是,由于文本框中的值是字符串,我无法将它们转换为整数。
@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
var answer1 = Int(txtBox1.text)
之类的值
Swift 2.0+ 的更新答案:
toInt()
方法给出错误,因为它已从 Swift 2.x 中的 String
中删除。相反,Int
类型现在有一个接受 String
的初始化程序:
let a: Int? = Int(firstTextField.text)
let b: Int? = Int(secondTextField.text)
基本理念,请注意,这只适用于 Swift 1.x(查看 ParaSara's answer 了解它在 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
...
'NSString' does not have a member named 'toInt'
。有任何想法吗?
NSString
和 String
是两个不同的对象,具有不同的方法。 NSString
有一个名为 .intValue
的方法
myString.toInt()
- 将字符串值转换为 int 。
斯威夫特 3.x
如果你有一个整数隐藏在一个字符串中,你可以使用整数的构造函数进行转换,如下所示:
let myInt = Int(textField.text)
与其他数据类型(Float 和 Double)一样,您也可以使用 NSString 进行转换:
let myString = "556"
let myInt = (myString as NSString).integerValue
您可以使用 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
}
编辑/更新: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 ?? "" }
}
Extensions 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) }
}
迅捷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
}
//Xcode 8.1 和 swift 3.0
我们也可以通过 Optional Binding 来处理,Simply
let occur = "10"
if let occ = Int(occur) {
print("By optional binding :", occ*2) // 20
}
在 Swift 4.2 和 Xcode 10.1 中
let string = "789"
if let intValue = Int(string) {
print(intValue)
}
let integerValue = 789
let stringValue = String(integerValue)
或者
let stringValue = "\(integerValue)"
print(stringValue)
斯威夫特 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
在 Swift 4 中:
extension String {
var numberValue:NSNumber? {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self)
}
}
let someFloat = "12".numberValue
对 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
我制作了一个简单的程序,其中您有 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)"
}
希望这可以帮助。
斯威夫特 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
关于 int() 和 Swift 2.x:如果您在转换后得到一个 nil 值,请检查您是否尝试转换具有大数字的字符串(例如:1073741824),在这种情况下尝试:
let bytesInternet : Int64 = Int64(bytesInternetString)!
最新的 swift3 这段代码只是将字符串转换为 int
let myString = "556"
let myInt = Int(myString)
因为字符串可能包含非数字字符,您应该使用 guard
来保护操作。例子:
guard let labelInt:Int = Int(labelString) else {
return
}
useLabelInt()
我最近遇到了同样的问题。以下解决方案对我有用:
let strValue = "123"
let result = (strValue as NSString).integerValue
Swift5 将浮点数或整数字符串转换为整数:
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())
用这个:
// 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 从您的 XIB 或情节提要中设为 DecimalTab,并删除任何 if 条件以进行任何计算,即。
var ans = a + b
answerLabel.text = "Answer is \(ans)"
因为键盘类型是 DecimalPad,所以没有机会输入其他 0-9 或 .
希望这有帮助!
// 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);
这对我有用
var a:Int? = Int(userInput.text!)
对于 Swift3.x
extension String {
func toInt(defaultValue: Int) -> Int {
if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) {
return n
} else {
return defaultValue
}
}
}
斯威夫特 4,斯威夫特 5
有不同的情况可以从某物转换为某物数据类型,这取决于输入。
如果输入数据类型是Any
,我们必须在转换为实际数据类型之前使用as
,然后再转换为我们想要的数据类型。例如:
func justGetDummyString() -> Any {
return "2000"
}
let dummyString: String = (justGetDummyString() as? String) ?? "" // output = "2000"
let dummyInt: Int = Int(dummyString) ?? 0 // output = 2000
替代解决方案。您可以使用扩展本机类型。您可以在操场上进行测试。
extension String {
func add(a: Int) -> Int? {
if let b = Int(self) {
return b + a
}
else {
return nil
}
}
}
“2”.add(1)
我的解决方案是对字符串到 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
}
}
}
@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
}
问题:字符串“4.0000”不能使用 Int(“4.000”) 转换为整数?
答案: Int() 检查字符串是否为整数,如果是,则给您整数,否则为零。但是 Float 或 Double 可以将任何数字字符串转换为相应的 Float 或 Double 而无需给出 nil。例如,如果您有“45”整数字符串,但使用 Float("45") 会得到 45.0 浮点值,或者使用 Double("4567") 会得到 45.0。
解决方案: NSString(string: "45.000").integerValue 或 Int(Float("45.000")!)!得到正确的结果。
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
}
}
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)
从 swift 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) }
吗?其中 counter
应该是 String?
guard
和 if let
语句
"\(someInt)"
不好String(someInt)
更容易阅读Int(firstText.text)!
,然后我仍然看到可选的。为什么?我没有拆开它吗?nil
时,这将崩溃。当字符串来自这种情况下的 UI 元素时,可能不会发生。但防止崩溃的一种方法是向字符串添加默认值:let a:Int? = Int(firstText.text ?? "")
。