我正在尝试创建一个可以输入高度和比例的应用程序,它会计算区域等等。但是当我输入4,2或4.2时,它会崩溃或说不好执行。我尝试了不同的方法,但我可能做错了。我试过Float和Double而没有运气。我将非常感谢任何帮助。
let atext: Int? = Int(radien.text!)
let btext: Int? = Int(höjden.text!)
let ctext: Int? = Int(sidan.text!)
let myInt = (atext! * atext!)
let tre = 3
let myInt2 = Double(myInt) * Double(M_PI) * Double(btext!)
let result = Float(myInt2) / Float(tre)
volymenSvar.text = "\(result)"
答案 0 :(得分:1)
你的问题是你的力量展开aText
并失败了。
aText
被定义为Int(radien.text!)
,可能会失败两次(radien.text!可能会失败,而其作为Int的转换也可能会失败)
如果将这些文本强制转换为Double以允许使用十进制数,该怎么办?此外,您应该使用条件绑定,如下例所示:
在你的函数中输入以下代码:
guard let radien = radien.text, höjden = höjden.text, sidan = sidan.text else { return }
let atext: Double? = Double(radien)
let btext: Double? = Double(höjden)
let ctext: Double? = Double(sidan)
if let a = atext, b = btext, c = ctext {
let myInt = (a * a)
let tre = 3
let myInt2 = Double(myInt) * Double(M_PI) * Double(b)
let result = Float(myInt2) / Float(tre)
print("\(result)")
}
如果textFields中没有文本,则guard语句将阻止您收到错误。
如果从文本转换为Double失败,则条件绑定(if let
)将阻止您崩溃
答案 1 :(得分:0)
试试这个解决方案:
func asd()
{
let atext = getNumberFromString(radien.text)
let btext = getNumberFromString(höjden.text)
let ctext = getNumberFromString(sidan.text)
let myInt = (Double(atext) * Double(atext))
let tre = 3
let myInt2 = Double(myInt) * Double(M_PI) * Double(btext)
let result = Float(myInt2) / Float(tre)
volymenSvar.text = "\(result)"
}
func getNumberFromString(string:String?) -> NSNumber
{
var result:NSNumber = 0
if let aString = string
{
let formattedString = aString.stringByReplacingOccurrencesOfString(",", withString: ".")
let formatter = NSNumberFormatter.init()
let number:NSNumber? = formatter.numberFromString(formattedString)
if let aNumber = number
{
result = aNumber
}
}
return result
}
答案 2 :(得分:-1)
为什么不喜欢这个?
var atext = radien.text.floatValue
var btext = höjden.text.floatValue
var ctext = sidan.text.floatValue
var myInt = (atext * atext)
let tre = 3
var myInt2 = myInt * Double(M_PI) * btext
var result = myInt2 / tre
volymenSvar.text = "\(result)"