使用 prepareForSegue 作为数字而不是字符串传递 textFielddata

Passing textFielddata with prepareForSegue as a number and not a string

我在处理整个字符串 int 时遇到了问题。

我已经设法弄清楚如何将每个字符串转换为数字,但是它 returns 作为一个可选的,当我尝试用它做任何事情时,我得到 nil。

我的目标是从用户那里获取 4 个输入。

每个输入文本字段都在单独的视图控制器上。

每个视图控制器使用 segue prepareForSegue 从它前面的视图控制器传递的变量中获取数据。

现在我到达最后一个视图控制器并且所有数据都顺利通过,问题是我无法对变量中保存的值进行任何数学运算,因为它们是字符串。

即使在使用 .int() 进行转换后,我也无法使用它们进行数学运算。

这是最后一个视图控制器类文件代码:

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

我不确定你是否想对所有这些值使用整数,但除此之外我 运行 这个代码:

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

在这两种情况下都没有输出 nil。我想你想看看你的原始字符串是如何设置的。也许他们永远不会从“”重置。

顺便说一句,回到使用 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:

假设所有数字都是浮点数,总账单为:

var fTotal:Float = subTotalNumber + taxAmountNumber + tipNumber
var costPerGuest:Float = fTotal / guestNumber

let fTotalText = NSString(format: "%.2f", fTotal)
let costPerGuestText = NSString(format: "%.2f", costPerGuest)