如何在Swift中将两个String的数量相加

时间:2015-11-06 16:18:39

标签: string swift

如何在字符串中添加两个数字,我在这里执行此操作但它不起作用,它在行中说明

var result = Int(char1) + Int(char2)

无法为类型' int'调用初始值设定项使用类型'(字符)'

的agurment列表
import UIKit

var str: String = "1 + 2"
var char1 = str[str.startIndex.advancedBy(0)]
var char2 = str[str.startIndex.advancedBy(4)]

var result = Int(char1) + Int(char2)

EDIT1:

在@Phillip Mills说完之后,它有效,但我有一个小问题:

import UIKit

var str: String = "1 + 2"
var char1 = str[str.startIndex]
var char2 = str[str.endIndex] //error: Execution was interrupted, reason: EXC_BADINSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

var result = Int(String(char1))! + Int(String(char2))!

为什么str.startIndex工作,但str.endIndex不起作用?

https://www.freewebmentor.com/2018/02/swift-program-add-two-numbers.html

4 个答案:

答案 0 :(得分:6)

如果您知道分隔符将是" +"然后你可以使用

let str = "1 + 2"
let sum = str.componentsSeparatedByString(" + ").flatMap{ Int($0) }.reduce(0) { $0 + $1 }

这允许您添加多个数字,并一次添加两个以上,即:

let str = "1 + 2 + 432"

答案 1 :(得分:3)

即使您的问题仅针对两个数字,您也可以使用以下代码使用正则表达式并结合函数mapreduce来获取字符串中的所有数字:

func matchesForRegexInText(regex: String!, text: String!) -> [String] {

   do {
       let regex = try NSRegularExpression(pattern: regex, options: [])
       let nsString = text as NSString
       let results = regex.matchesInString(text,
        options: [], range: NSMakeRange(0, nsString.length))
       return results.map { nsString.substringWithRange($0.range)}
   } catch let error as NSError {
       print("invalid regex: \(error.localizedDescription)")
       return []
   }
}


let string = "1 + 2 + 3 + 4"
let sum = matchesForRegexInText("[0-9]", text: string).map { Int($0)! }.reduce(0, combine: +)
print(sum) // 10

以上代码使用matchesForRegexInText提取字符串中的所有数字,然后使用map函数将所有数字转换为Int并使用reduce函数获得累积金额。

我希望这对你有所帮助。

答案 2 :(得分:3)

NSExpression在Cocoa中被低估了一个阶级,可以用非常聪明的方式做到这一点。

let string = "1 + 2"
let arithmeticExpression = NSExpression(format: string)
let additionResult = arithmeticExpression.expressionValueWithObject(nil, context: nil) as! Int
// -> 3

答案 3 :(得分:2)

您可以从字符创建字符串,从字符串创建Int,因此有一种可能性:

var result = Int(String(char1))! + Int(String(char2))!