我有一个来自JSON的号码,这个数字代表一个年龄。用户给我一个两个年龄段的范围,可能代码应该检查我从JSON得到的这个数字是否在范围内。
这是我的代码,它给了我错误
在没有更多上下文的情况下,表达式是不明确的吗?
let age = "40"
if Int(AgeFrom) ... Int(AgeTO) ~= Int(age) {
print("yes")
}
更新
如果允许值:AnyObject = response.result.value为AnyObject? { var ages = String
let json = JSON(value)
for (key, subJson) in json {
ages.append(subJson["age"].string!)
}
guard let min = Int(self.DropDownFrom.selectedItem!) else { return }
guard let max = Int(self.DropDownTo.selectedItem!) else { return }
for fitage in ages {
switch ages
{
case (min...max):
print ("Age is in range")
default:
print ("Nope, not this time")
}
}
仍然给我一个错误。
答案 0 :(得分:1)
您需要打开选项,因为Int(:String)
方法可能没有有效答案。
最好的办法是guard
guard let min = Int(AgeFrom) else { return }
guard let max = Int(AgeTo) else { return }
从那里你可以使用简单的if
声明:
if (min <= age && age <= max)
{
print ("Age is in range")
}
或者真的很花哨并使用switch
语句模式匹配语法(我更喜欢)
switch age
{
case (min...max):
print ("Age is in range")
default:
print ("Nope, not this time")
}
答案 1 :(得分:1)
这是编程中的基本内容,检查可选项是否在if
的其他两个可选值之间:
if Int(AgeFrom)! <= Int(age)! && Int(AgeTO)! >= Int(age)! {
print("It is in the range!")
}
但是,我建议使用switch
进行个案处理:
switch(Int(AgeFrom)! <= Int(age)!, Int(AgeTO)! >= Int(age)!){
case (true,true): print("Yes, it fits the range")
case (false,true): print("Too young!")
case (true,false): print("Too old!")
}
对于多个年龄值的情况,第二种解决方案要好得多,特别是当它超出范围时。
希望它有所帮助!
答案 2 :(得分:1)
您还可以使用可选绑定:
if let ageFrom = Int(ageFrom),
let ageTo = Int(ageTo),
ageFrom...ageTo ~= age
{
print("yes")
} else {
print("no")
}
答案 3 :(得分:0)
你必须解开选项:
AgeFrom
当然这是不安全的解包方式,因为如果AgeTO
,age
或void write(const char* msg, ...)
{
va_list args;
va_start(args, msg);
FILE* file = fopen("/network/cewin/loggerfile.txt", "a");
if(file != NULL)
{
vfprintf(file, msg, args);
fputc('\n', file);
fclose(file);
va_end(args);
}
}
的转换失败,它会崩溃。