在快速无效的情况下将AnyObject转换为String

时间:2016-07-10 21:15:13

标签: ios swift optional anyobject

我从我的应用程序向服务器发出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类型的值?预期参数String"。我想如果我想将它与字符串进行比较,我必须将AnyObject类型的变量转换为String。我已经尝试了我在Google上找到的所有选项,但我没有让它工作。

2 个答案:

答案 0 :(得分:1)

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

你可能想要的是:

String

请注意,如果您的JSON具有" loggedIn" field as Integer,如:

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

您希望将loggedIn强制转换为Integer,而不是String。

答案 1 :(得分:0)

您必须告诉编译器预期的类型是var timeline = document.querySelector(<selector for your timeline tag>); timeline.classList.add('active');

String