Ios 无法从UITextField读取XCode 8中的数字

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

我试图询问患者的年龄,并检查他/她是否是成年人。然而,它总是返回false(参数总是小于18)!! 代码如下:

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)"