Ios 无法从UITextField读取XCode 8中的数字
我试图询问患者的年龄,并检查他/她是否是成年人。然而,它总是返回false(参数总是小于18)!! 代码如下:Ios 无法从UITextField读取XCode 8中的数字,ios,swift,Ios,Swift,我试图询问患者的年龄,并检查他/她是否是成年人。然而,它总是返回false(参数总是小于18)!! 代码如下: var index = 0 let patAge = Double(txtAge.text!) if (txtAge.text?.characters.count == 0){ index = 0 while index < medicationMenuItems.count{ medicationMenuI
var index = 0
let patAge = Double(txtAge.text!)
if (txtAge.text?.characters.count == 0){
index = 0
while index < medicationMenuItems.count{
medicationMenuItems[index].medicationName = medicationNames[index]
index += 1
}
} else {
if (patAge?.isLess(than: 18))!{
index = 0
while index < medicationMenuItems.count{
medicationMenuItems[index].medicationName = medicationNames[index] + ": Adult?"
index += 1
}
}
}
tableViewMedications.reloadData()
它返回一个错误,我应该给出“String(description:doubleValue)
有什么想法吗?一条评论是,我不确定你的意图是什么,将“年龄”转换为双倍。这几乎可以肯定是一个整数 如何将文本读入双精度 这很有效
var ageText = "17"
var ageAsDouble = Double(ageText)
var str = String(ageAsDouble!)
print("printing string value", str)
但如果你把年龄作为一个整体来工作,你可能真的想要这个:
let minimumAge = 18
var ageText = 17
var age = Int(age)
if (age! < minimumAge) {
print("must be older than 18!")
}
我决不是swift专家,但您需要了解的是,当涉及可选值时,该值可能存在,也可能不存在。例如,如果您尝试将字符串“32f”传递给Double init,则无法创建Double。因此,如果您这样做:
var ageText = "32f"
var age = Double(ageText)
then do..
print(age!)
它肯定会出错,这是因为该值为零。强制可选展开告诉程序“展开该值,因为我100%确定它不是零!”!“正如瓦迪安所提到的,除非出于任何原因需要使用部分时间,否则您应该使用Int。此外,在检查字符串的字符计数时,我强烈建议您将其称为Int,而不是使用普通键盘时的Int:
txtAge.text?.replace(" ", replacement: "").characters.count
以防止任何进一步的错误
其次,不要像这样包装双层膜:
String(doubleValue)
您应该这样做:
txtAge.text = "\(doubleValue)"
如果你坚持把它保留为一个双倍,也许你想把它转换成int数,而不是用一个十进制数字来表示。
一个时代你真的需要<代码>双< /代码>吗?为什么不使用int而不是双,简单地检查if(value<18),而不管你是否使用<代码>双(字符串)。或Int(String)
返回可选值(该字符串可能无法解析)所以你需要通过打开它,如果让…
整个上半部分的答案不适用,因为OP试图将用户输入的文本转换为双精度的。你的代码处理的是Int
,而不是字符串
。抱歉,rmaddy,我试图为这两个部分提供代码示例来解释OP的工作方式如果他真的想要一个Int而不知道它,那么这是一个错误。为这两个实例提供代码示例是否不好?我刚刚意识到“var ageText”上有一个拼写错误“行。。。Oops但是OP没有试图将Int
转换为Double
,而且根本不需要。现在您需要处理一个事实,即ageAsDouble
将是可选的。我会让您选择它的,谢谢!工作!尽管Swift 3中不存在替换!如果我的答案有效,你介意点击复选标记吗D
txtAge.text = "\(doubleValue)"