如果有时检测为 int 和其他字符串,如何转换 swiftyjson 值

Posted

技术标签:

【中文标题】如果有时检测为 int 和其他字符串,如何转换 swiftyjson 值【英文标题】:How to cast swiftyjson value if sometimes is detected as int and other as string 【发布时间】:2016-04-07 14:40:51 【问题描述】:

我正在使用 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

【问题讨论】:

没有意义的实际 JSON 中的数据如何传输? but if the value is greater than 0 returns a nil and only could be obtained as string 这没有多大意义。请向我们展示大于 0 的值失败的示例。 响应来自 php,使用数组中的 json_encode 【参考方案1】:
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

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

【讨论】:

【参考方案2】:

这是我第一个不使用 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
   

【讨论】:

【参考方案3】:

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

之前

echo json_encode( $results);

之后

echo json_encode( $results, JSON_NUMERIC_CHECK );

【讨论】:

以上是关于如果有时检测为 int 和其他字符串,如何转换 swiftyjson 值的主要内容,如果未能解决你的问题,请参考以下文章

如何打印2个int但没有添加?

java里,如何把String字符串转换成int[]数组?

java里,如何把String字符串转换成int[]数组?

如何在 Go 中将 int 值转换为字符串?

String 如何转换成int比较大小

C语言,如何把输入的一个字符串,转换为相应的二进制数?