我在处理整个 string int 问题时遇到了麻烦。
我已经设法弄清楚如何将每个字符串转换为数字,但是它作为可选值返回,当我尝试用它做任何事情时,我得到零。
我的目标是获取用户的 4 个输入。
每个输入文本字段都位于单独的 View Controller 上。
每个 View Controller 都使用 segueprepareForSegue 从之前的 View Controller 传递的变量中获取数据。
现在我到达最后一个 View Controller ,所有数据都很好地传递,问题是我无法对变量中保存的值进行任何数学运算,因为它们是字符串。
即使使用 .int()
进行转换后,我也无法用它们进行数学运算。
这是最后一个 View Controller 类文件代码:
class splitTheBillAmountViewController: UIViewController {
// capture passed data from previous View Controller
var numOfGuests = ""
var subTotalAmount = ""
var taxAmount = ""
var tipAmount = ""
@IBOutlet weak var dynamicTotal: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
println("Split The Bill!”)
// output variables data
println(numOfGuests)
println(subTotalAmount)
println(taxAmount)
println(tipAmount)
// store variables to new name
let string1 = numOfGuests
let string2 = subTotalAmount
let string3 = taxAmount
let string4 = tipAmount
// conversions
let guestNumber : Int? = string1.toInt()
let subTotalNumber : Int? = string2.toInt()
let taxAmountNumber : Int? = string3.toInt()
let tipNumber : Int? = string4.toInt()
// visual to see if numbers are converted .int()
println("\(guestNumber)")
println("\(subTotalNumber)")
println("\(taxAmountNumber)")
println("\(tipNumber)")
// store data to variable
let fTotal : Int? = (guestNumber)
// Update label with total
self.dynamicTotal.text = “fTotal"
// Do any additional setup after loading the view.
}
如何使用这些变量进行数学运算?
我只需要将它们相加并除以 var numOfGuests
最佳答案
我不确定您是否想对所有这些值使用 Ints,但除此之外我运行了以下代码:
var numOfGuests = "2"
var subTotalAmount = "25"
var taxAmount = "3"
var tipAmount = "2"
let string1 = numOfGuests
let string2 = subTotalAmount
let string3 = taxAmount
let string4 = tipAmount
let guestNumber : Int? = string1.toInt()
let subTotalNumber : Int? = string2.toInt()
let taxAmountNumber : Int? = string3.toInt()
let tipNumber : Int? = string4.toInt()
println("\(guestNumber)")
println("\(subTotalNumber)")
println("\(taxAmountNumber)")
println("\(tipNumber)")
它打印:
可选(2)
可选(25)
可选(3)
可选(2)
然后我将打印语句修改为:
println("\(guestNumber!)")
println("\(subTotalNumber!)")
println("\(taxAmountNumber!)")
println("\(tipNumber!)")
它打印:
2
25
3
2
这两种情况的输出都不为零。我想你想看看你原来的琴弦是如何设置的。也许它们永远不会从“”重置。
顺便说一句,回到使用 Int 类型进行计算,我认为您确实想使用 Float 类型,而不是 Int。
这段代码:
var subTotalAmount = "25.15"
let string2 = subTotalAmount
var subTotalNumber = (string2 as NSString).floatValue
println("\(subTotalNumber)")
打印:
25.15
编辑:
我尝试复制你的代码,我想你知道你有一个拼写错误,编译器应该警告你。当我修正了拼写错误后,我得到了零。我让这段代码可以工作:
var subTotalAmount = "25.15"
let string2 = subTotalAmount
var subTotalNumber = (string2 as NSString).floatValue
println("\(subTotalNumber)")
let text = NSString(format: "%.2f", subTotalNumber)
println(text)
打印:
25.15
25.15
编辑2:
假设您将所有数字都作为 float ,则总账单将为:
var fTotal:Float = subTotalNumber + taxAmountNumber + tipNumber
var costPerGuest:Float = fTotal / guestNumber
let fTotalText = NSString(format: "%.2f", fTotal)
let costPerGuestText = NSString(format: "%.2f", costPerGuest)
关于xcode - 使用prepareForSegue作为数字而不是字符串传递textFielddata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969549/