Swift를 사용하여 문자열을 Int로 변환
이 응용 프로그램은 기본적으로 초기 및 최종 속도와 시간을 입력하여 가속을 계산 한 다음 공식을 사용하여 가속을 계산합니다. 그러나 텍스트 상자의 값은 문자열이므로 정수로 변환 할 수 없습니다.
@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
기본 아이디어, 이것은 Swift 1.x에서만 작동한다는 점에 유의하십시오 ( Swift 2.x에서 어떻게 작동하는지 보려면 ParaSara의 답변 을 확인하십시오).
// 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"
}
스위프트 4 업데이트
...
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
...
swift 2.0 업데이트 답변 :
toInt()
방법에 오류가 발생했습니다. Swift 2.x에서는 .toInt()
함수가 문자열에서 제거 되었기 때문 입니다. 대신 Int는 이제 String을 허용하는 이니셜 라이저를 갖습니다.
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
myString.toInt()
-문자열 값을 int로 변환합니다.
스위프트 3.x
문자열 안에 정수가 숨겨져 있으면 다음과 같이 정수의 생성자를 사용하여 변환 할 수 있습니다.
let myInt = Int(textField.text)
다른 데이터 유형 (Float 및 Double)과 마찬가지로 NSString을 사용하여 변환 할 수도 있습니다.
let myString = "556"
let myInt = (myString as NSString).integerValue
Xcode 8.3.2 • 스위프트 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
}
}
사용하고 싶습니다 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
}
스위프트 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
옵션 바인딩으로 간단히 처리 할 수도 있습니다.
let occur = "10"
if let occ = Int(occur) {
print("By optional binding :", occ*2) // 20
}
스위프트 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
에서 스위프트 4.2 및 엑스 코드 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)
스위프트 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)"
}
도움이 되었기를 바랍니다.
스위프트 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)
문자열에 숫자가 아닌 문자가 포함될 수 있으므로 a guard
를 사용하여 작업을 보호해야합니다. 예:
guard let labelInt:Int = Int(labelString) else {
return
}
useLabelInt()
String to 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
이것을 사용하십시오 :
// 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 KeyboardType을 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
}
}
}
Swift 2.x에서는 .toInt () 함수가 String에서 제거되었습니다. 대신 Int는 이제 String을 허용하는 이니셜 라이저를 갖습니다.
정수 (myString)
귀하의 경우 textField.text! .toInt () insted Int (textField.text!) 사용할 수 있습니다
스위프트 1.x
let myString: String = "256"
let myInt: Int? = myString.toInt()
스위프트 2.x, 3.x
let myString: String = "256"
let myInt: Int? = Int(myString)
최근에 같은 문제가 발생했습니다. 아래 솔루션은 저에게 효과적입니다.
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".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 () 검사 문자열이 정수인지 여부입니다. 그렇다면 정수를, 그렇지 않으면 nil을 지정하십시오. Float 또는 Double은 nil을 지정하지 않고 임의의 숫자 문자열을 각각의 Float 또는 Double로 변환 할 수 있습니다. 예를 들어 "45"정수 문자열이 있지만 Float ( "45")를 사용하면 45.0 부동 소수점 값을 제공하거나 Double ( "4567")을 사용하면 45.0이 표시됩니다.
해결책 : NSString (string : "45.000"). integerValue 또는 Int (Float ( "45.000")!)! 올바른 결과를 얻을 수 있습니다.
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
}
}
스위프트 5.0 이상
일
분할하는 String
경우 두 개가 substrings
아닌 두 개를 만듭니다 Strings
. 방법은 아래이 확인합니다 Any
하고 T0 변환 NSNumber
A가 변환 쉬운 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)
현재 빠른 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에서 문자열 값을 정수로 변환
let strValue:String = "100"
let intValue = strValue as! Int
var intValueFromString:Int = strValue as! Int
or
var intValueFromString = Int(strValue)!
참고 URL : https://stackoverflow.com/questions/24115141/converting-string-to-int-with-swift
'Programing' 카테고리의 다른 글
"."로 Java 문자열 분할 (0) | 2020.03.04 |
---|---|
Visual Studio에서 ReSharper를 비활성화하고 다시 활성화하려면 어떻게해야합니까? (0) | 2020.03.04 |
* ngFor를 사용하여 액세스 키 및 오브젝트 값 (0) | 2020.03.04 |
fastcgi 및 django를 사용하여 nginx의 오류 로그를 어디에서 찾을 수 있습니까? (0) | 2020.03.04 |
jQuery를 사용한 이메일 검증 (0) | 2020.03.04 |