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

标签 xcode string swift xcode6 numbers

我在处理整个 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/

相关文章:

ios - Swiftui - UIHostingController 添加不需要的导航栏

ios - 如果不是整数,则 Swift 格式化字符串有 2 个小数

ios - 在 Assets 中创建了一个组。之后图像无法加载(甚至应用程序图标)

iphone - 帮助创建与filteredArrayUsingPredicate一起使用的谓词

ios - 运行 pod install 时出错 - 在目标 `iOS` 上自动分配版本 `8.0` 的平台 `Runner`

swift - 如何在didSelectItemAt indexPath函数下显示ViewController? (没有 Storyboard)

c - 如何在C中打印出字符串的单个字符

iphone - 将值附加到 NSMutableArray 并保存到 NSUserDefaults

JavaScript:用普通空格替换不间断空格和特殊空格字符

java - 将字符串与字符串元素数组进行比较