ios - 转换时变量为空

标签 ios swift casting nsnull

我有一个来自 NSArray 的可变内容:let content = application["content"]!

当我打印内容时,我有一个字符串: print(content) -> 我的内容

但是当我想将变量转换为 String 时:let content = application["content"]!作为!字符串

我无法打印我的变量,因为它是空的: print(content) -> 无法将类型“NSNull”(0x1a0507768)的值转换为“NSString”(0x1a0511798)。

为什么?

更新:

未转换值时我的数组:

{
    "application_title" = "Marina Kaye";
    "application_type" = discussions;
    "application_type_name" = Discussions;
    content =     (
                {
            content = "Le nouvel album de Marina Kaye";
            link = "?message_id=118";
        },
                {
            content = "Son album est num\U00e9ro 1 des";
            link = "?message_id=131";
        },
                {
            content = "Le nouvel album s'appel";
            link = "?message_id=126";
        }
    );
    "content_title" = "Messages utiles";
    "content_type" = "useful_messages";
}

转换值时我的数组:

{
    "application_title" = "Marina Kaye";
    "application_type" = discussions;
    "application_type_name" = Discussions;
    content = "<null>";
    "content_title" = "<null>";
    "content_type" = "usefull_messages";
}

我无法将内容转换到 NSArray 并将 content_title 转换到字符串。

我的代码:

    let applicationsArray = result["applications"]! as! NSArray

    for application in applicationsArray {

        let applicationTitle = application["application_title"]! as! String
        let applicationType = application["application_type"]! as! String
        let applicationTypeName = application["application_type_name"]! as! String
        let content = application["content"]! as! NSArray
        let contentTitle = application["content_title"]! as! String
        let contentType = application["content_type"]! as! String
        self.listApplications.append(Application(applicationTitle: applicationTitle, applicationType: applicationType, applicationTypeName: applicationTypeName, content: content, contentTitle: contentTitle, contentType: contentType))
    }

最佳答案

当您在 Swift 中编码时,您不需要遗留的 NSArrayNSDictionary 类型。相反,它们现在是 ArrayDictionary,但您甚至不必关心这些。

要声明一个数组,通常在方括号中指定类型,例如[String]。对于字典,键和值都需要这个,用冒号分隔,例如[字符串:AnyObject]

从您的日志输出中,您有一个类型为 [String: AnyObject] 的字典,其中包含 6 个键;它们都指向 String 对象,除了 "content" 对象。

"content" 键显然指向一个字典数组。这是这样写的:[[String: AnyObject]]。因此,将其转换为 String 不成功也就不足为奇了。

下面是解析 application 字典的“content”的方法:

if let content = application["content"] as? [[String: AnyObject]] {
   for item in content {
       let text = content["content"] as? String
       let link = content["link"] as? String
       // do something with this data
   }
}

我建议定义一个 classstruct 来捕获应用程序对象。您的代码将更加清晰和易于维护。

关于ios - 转换时变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34316427/

相关文章:

iOS Format String 转化为分秒

ios - 如何在单个文件中维护字符串常量 - ios

iphone - 在Objective C中使用自动布局相对于父 View 的位置

c++ - 在 C++ 中将 char 数组读取为 float 组,而无需使用 memcpy 复制它

c++ - 有符号整数和无符号整数之间的转换

c++ - 为什么这个函数没有被编译器捕获,它做了什么?

ios - 如何将单个 TableView 单元链接到另一个 ViewController

ios - 检查应用程序是否由于 RemoteNotification 而变得事件(应用程序已启动)

ios - 单个 viewController 中的多个 pickerview

swift - storageRef.downloadURL 没有在里面执行代码