找到一个范围迅速的数字3

时间:2017-02-28 13:45:37

标签: swift

我有一个来自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")
     }
    }

仍然给我一个错误。

4 个答案:

答案 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的其他两个可选值之间:

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

当然这是不安全的解包方式,因为如果AgeTOagevoid 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); } } 的转换失败,它会崩溃。