如果有时被检测为int而另一些被检测为字符串

时间:2016-04-07 14:40:51

标签: swift2 alamofire swifty-json

我使用alamofire和swiftyjson获取登录信息

Alamofire.request(.POST, postsEndpoint, parameters: newPost)
                .responseSwiftyJSON({ (request, response, json, error) in

在我的帖子回复中我有值

json["id_usuario"]

问题是,当值为-1或0(零)时,可以获得int 使用

let idUser = json["id_usuario"].int

和响应的示例,其值为-1

{
  "id_usuario" : -1
}

和值大于时的响应,成功登录

{
  "estado" : "Jalisco",
  "plan_activo" : "0",
  "datos_registro_completos" : 1,
  "plan" : 0,
  "genero" : "H",
  "id_usuario_openpay" : "annvwl3didjylvex0wzh",
  "fb_id" : "10205386840402780",
  "email" : "steel.edward@hotmail.com",
  "postal_code" : "44630",
  "address" : "Nueva Escocia #1514 Interior 106",
  "nombres" : "Steel Edward",
  "app_mat" : "George",
  "app_pat" : "Vázquez",
  "ciudad" : "Guadalajara",
  "id_usuario" : "204",
  "admin" : "1",
  "phone_number" : "3334691505"
}

但如果该值大于0,则返回nil,只能获得字符串

let idUser = json["id_usuario"].string

我的最终代码有效,看起来像这样

if let idUser = json["id_usuario"].int {
   if(idUser == -1) {
        //specific error from the server
   } else if(idUser == 0) {
        //another specific error from the server                            
   }
} else if let idUser = json["id_usuario"].string {
          if(idUser != "") {
             //success
          }
}

我想将值始终存储为Int并使用它执行验证,并获得这样的代码

if(idUser == -1) {
  //specific error from the server
} else if(idUser == 0) {
  //another specific error from the server
} else if (idUser > 0) {
  //success
}

3 个答案:

答案 0 :(得分:0)

var id = 0
if let num = json["id_usuario"].int {
    id = num
} else if let str = json["id_usuario"].string,
    let num = Int(str) {
    id = num
}
//
// do something with id, which is an Int value

如果你拥有服务器代码,你最好在那里找到一个bug ....

答案 1 :(得分:0)

这是我第一个不使用Swifty-JSON的解决方案

    let id_usuario_object:NSObject = jsonData.valueForKey("id_usuario") as! NSObject

    var id_usuario:Int

    if ( id_usuario_object.isKindOfClass(NSString) ) {
         let id_usuario_string:NSString = jsonData.valueForKey("id_usuario") as! NSString
         id_usuario = Int(id_usuario_string.intValue)
    } else {
         id_usuario = jsonData.valueForKey("id_usuario") as! NSInteger
   }

答案 2 :(得分:0)

问题在于来自PHP的JSON响应......

     <build>
            <finalName>mywebtestproject</finalName>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.1.1</version>
                    <configuration>
                        <outputDirectory>webapps</outputDirectory>
                        <warName>ROOT</warName>
                        <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
                  </configuration>
            </plugin>
        </plugins>
    </build>

echo json_encode( $results);