【问题标题】:Cast from 'MDLMaterialProperty?!'?从“MDLMaterialProperty?!”投射?
【发布时间】:2015-09-10 11:26:31
【问题描述】:

我正在使用我正在转换为 Xcode 7 的应用程序的解析框架。作为迁移项目的一部分发生的有趣错误之一如下:

从“MDLMaterialProperty?!”投射到不相关的类型 'PFUser' 总是失败

有问题的行似乎是下面的“if let”子句。我已经评论了在以前版本的 Swift 中运行良好的旧行以进行比较。

关于这实际上在做什么 - 我已将 Parse 对象数组传递到“likesForThankful”,其中指针“userID”指的是相关的 PFUser。作为此方法的一部分,我将单个 PFUser 写入数组。

任何帮助表示赞赏 - 在此先感谢。

 //Add PFUsers who Like Post to our FeedItem   
 private func callbackFromLikesProcessing(likesForThankful:[AnyObject], againstFeedItem:FeedItem){

    //Instantiate our Objective C compatible array for processing later
    againstFeedItem.parseUsersObjectsWhoLikePost = NSMutableArray()

    //Loop through likes and add PFUsers to array of users who like post
    for usersWhoLikePost in likesForThankful{
        // if let parseUserWhoLikesPost = usersWhoLikePost["userID"] as PFUser{
        if let parseUserWhoLikesPost = usersWhoLikePost["userID"] as? PFUser {
            againstFeedItem.parseUsersObjectsWhoLikePost.addObject(parseUserWhoLikesPost)
        }
    } 

安德鲁

【问题讨论】:

    标签: ios swift parse-platform swift2


    【解决方案1】:

    弄清楚它是否可以帮助任何人 - 它是基本的 Swift 语法(虽然我不确定为什么编译器让我在 Swift 的第一个版本中摆脱这个问题!)。

    因为 usersWhoLikePost 是一个 PFObject,它恰好包含一个指向 PFUser 对象的指针,所以我需要先有条件地解开它,如下所示:

        for usersWhoLikePost in likesForThankful{
            if let parseLikeObject = usersWhoLikePost as? PFObject{
                if let parseUserWhoLikesPost = parseLikeObject["userID"] as? PFUser {
                    againstFeedItem.parseUsersObjectsWhoLikePost.addObject(parseUserWhoLikesPost)
                }
            }
    
        }
    

    在此之后,我可以像以前一样继续,并通过 PFUser 对象的有条件展开来访问“userID”属性。

    【讨论】:

    • 你知道你可以用逗号链接你的 if 语句——你不必像那样嵌套它们……
    • 从 7.1 升级到 7.2 后遇到同样的问题。过去我解析 JSON 数据时的 NSDictionary 现在显然是 MDLMaterialProperty 并且它在我将元素投射到 NSDictionary 对象中的任何地方都崩溃了。
    • 如果您使用 7.2 来实现这一点,这是一个重大发现;如果您在数组样式循环中使用 for var,这几乎每次都会让您受益。我不得不将我的所有内容都转换为 for i in 0..
    • 感谢@buildsucceeded 绝对可以解决这个问题,但也希望保持可读性。
    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2014-05-12
    • 2014-06-16
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多