【问题标题】:converting AnyObject to String in swift not working快速将 AnyObject 转换为 String 不起作用
【发布时间】:2016-07-10 21:15:12
【问题描述】:

我从我的应用程序向服务器发出 POST 请求,我得到 jsonString 作为响应。我已经制作了将字符串转换为字典的函数,如下所示:

    func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
        do {
            return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject]
        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}

从服务器获得响应后,我通过函数将字符串转换为字典,然后我想检查用户是否登录:

       let result = convertStringToDictionary(jsonString as String)

        if (result!["loggedIn"] == "1")
        {
            print("You are logged in!")
        }

然后我收到错误“无法将 AnyObject 类型的值转换为预期的参数字符串”。我想如果我想将它与字符串进行比较,我必须将 AnyObject 类型的变量转换为字符串。我已经尝试了我在谷歌上找到的所有选项,但我还没有让它工作。

【问题讨论】:

    标签: ios swift optional anyobject


    【解决方案1】:

    因为结果是一个[String : AnyObject] 类型的字典,所以您从中提取的值将被键入为AnyObject?,它对于== 没有有效的运算符重载String。您需要将提取的值转换为 String,然后才能将其与“1”进行比较。

    你可能想要的是这样的:

    if let result = convertStringToDictionary(jsonString as String), 
        loggedIn = result["loggedIn"] as? String 
        where loggedIn == "1" {
        print("You are logged in")
    }
    

    请注意,如果您的 JSON 将“loggedIn”字段作为整数,例如:

    {
        "loggedIn" : 1
    }
    

    您可能希望将 loggedIn 转换为 Integer,而不是 String。

    【讨论】:

    • 您的答案完美无缺,但为什么它只适用于 == 而不是 !=
    【解决方案2】:

    你必须告诉编译器预期的类型是String

    if let loggedIn = result?["loggedIn"] as? String where loggedIn == "1" { ...
    

    【讨论】:

    • 您的答案完美无缺,但为什么它只适用于 == 而不是 !=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2019-04-04
    相关资源
    最近更新 更多