应用程序主要通过输入初始和最终速度和时间来计算加速度,然后使用公式计算加速度。但是,由于文本框中的值是字符串,我无法将它们转换为整数。
@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
答案 0 :(得分:332)
更新swift 2.0的答案:
toInt()
方法出错。因为,在Swift 2.x中,.toInt()
函数已从String中删除。在替换中,Int现在有一个接受String的初始化器:
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
答案 1 :(得分:286)
基本理念,请注意,这仅适用于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
...
答案 2 :(得分:79)
myString.toInt()
- 将字符串值转换为int。
Swift 3.x
如果你有一个隐藏在字符串中的整数,你可以使用整数的构造函数进行转换,如下所示:
let myInt = Int(textField.text)
与其他数据类型(Float和Double)一样,您也可以使用NSString转换:
let myString = "556"
let myInt = (myString as NSString).integerValue
答案 3 :(得分:31)
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
}
}
答案 4 :(得分:23)
你想用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 :(得分:20)
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
}
除了强制绑定之外,你还可以使用Optional Binding。
例如:
if let number = Int(stringNumber) {
// number is of type Int
}
答案 6 :(得分:14)
// Xcode 8.1和swift 3.0
我们也可以通过Optional Binding来处理它,简单
let occur = "10"
if let occ = Int(occur) {
print("By optional binding :", occ*2) // 20
}
答案 7 :(得分:7)
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
答案 8 :(得分:6)
在Swift 4中:
extension String {
var numberValue:NSNumber? {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self)
}
}
let someFloat = "12".numberValue
答案 9 :(得分:5)
在 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)
答案 10 :(得分:4)
我制作了一个简单的程序,你有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)"
}
希望这会有所帮助。
答案 11 :(得分:3)
最新的swift3 此代码只是将字符串转换为int
let myString = "556"
let myInt = Int(myString)
答案 12 :(得分:3)
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
答案 13 :(得分:3)
关于int()和Swift 2.x:如果你在转换检查后得到一个nil值,如果你试图转换一个带有大数字的字符串(例如:1073741824),在这种情况下试试:
let bytesInternet : Int64 = Int64(bytesInternetString)!
答案 14 :(得分:2)
由于字符串可能包含非数字字符,因此您应使用guard
来保护操作。例如:
guard let labelInt:Int = Int(labelString) else {
return
}
useLabelInt()
答案 15 :(得分:1)
// 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);
答案 16 :(得分:1)
for Swift3.x
extension String {
func toInt(defaultValue: Int) -> Int {
if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) {
return n
} else {
return defaultValue
}
}
}
答案 17 :(得分:1)
这对我有用
var a:Int? = Int(userInput.text!)
答案 18 :(得分:1)
在Swift 2.x中, .toInt()函数已从String中删除。在替换中,Int现在有一个接受字符串
的初始化程序INT(myString的)
在你的情况下,你可以使用Int(textField.text!)insted of 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)
答案 19 :(得分: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"
}
OR
从您的XIB或故事板中将您的UITextField KeyboardType设置为DecimalTab,并删除任何if条件以进行任何计算,即
var ans = a + b
answerLabel.text = "Answer is \(ans)"
因为键盘类型是DecimalPad,所以没有机会输入其他0-9或。
希望这有帮助!!
答案 20 :(得分:0)
将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())
答案 21 :(得分:0)
我的解决方案是将字符串转换为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
}
}
}
答案 22 :(得分:0)
Swift 5.0及更高版本
工作
如果要拆分String
,它将创建两个substrings
而不是两个Strings
。下面的方法将检查Any
并将其转换为t0 NSNumber
,轻松地将NSNumber
转换为Int
,Float
所需的任何数据类型。 / p>
实际代码
//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)
答案 23 :(得分:0)
对于将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
答案 24 :(得分:0)
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
}
}
答案 25 :(得分:0)
我最近遇到了同样的问题。以下解决方案对我有用:
let strValue = "123"
let result = (strValue as NSString).integerValue
答案 26 :(得分:0)
问题:字符串&#34; 4.0000&#34;不能使用Int(&#34; 4.000&#34;)?
转换为整数答案:Int()检查字符串是否为整数,如果是,则给出整数,否则为nil。但是Float或Double可以将任何数字字符串转换为相应的Float或Double而不给出nil。例如,如果你有&#34; 45&#34;整数字符串,但使用Float(&#34; 45&#34;)为您提供45.0浮点值或使用Double(&#34; 4567&#34;)为您提供45.0。
解决方案:NSString(字符串:&#34; 45.000&#34;)。integerValue或Int(Float(&#34; 45.000&#34;)!)!得到正确的结果。
答案 27 :(得分:0)
截至 swift 3 ,我必须强迫我的#%@!字符串&amp; 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
答案 28 :(得分:0)
@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
}
答案 29 :(得分:0)
用于替代解决方案。您可以使用本机类型的扩展名。你可以在游乐场测试。
extension String {
func add(a: Int) -> Int? {
if let b = Int(self) {
return b + a
}
else {
return nil
}
}
}
&#34; 2&#34;。新增(1)
答案 30 :(得分:-1)
let strValue:String = "100"
let intValue = strValue as! Int
var intValueFromString:Int = strValue as! Int
or
var intValueFromString = Int(strValue)!