在 swift 中将 AnyObject 转换为 String 无效

converting AnyObject to String in swift not working

我从我的应用程序向服务器发出 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!")
        }

然后我收到错误 "Cannot convert value of type AnyObject? to expected argument String"。如果我想将它与字符串进行比较,我想我必须将 AnyObject 类型的变量转换为字符串。我已经尝试了我在 Google 上找到的每个选项,但我还没有让它工作。

因为结果是 [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。

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

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