菜鸟教程小白 发表于 2022-12-13 04:16:31

ios - 如何在 iOS swift 中实现评论和回复系统


                                            <p><p>我必须在我的应用程序中实现评论和回复系统。我正在从 API 获取数据,但我不明白如何执行此操作,因为我以前没有做过类似的事情。我知道我必须为这种类型的系统使用两个不同的单元格,但我不知道如何过滤评论和回复的数据并将它们显示在各自的单元格中。</p>

<p>这是我的 JSON:</p>

<pre><code>[
    {
      &#34;firstName&#34;: &#34;Mark&#34;,
      &#34;lastName&#34;: &#34;King&#34;,
      &#34;profilePic&#34;: &#34;avatar2 - Copy - Copy.jpg&#34;,
      &#34;reviewId&#34;: 54,
      &#34;userId&#34;: 4,
      &#34;serviceProviderId&#34;: 0,
      &#34;rating&#34;: 0,
      &#34;description&#34;: &#34;Thank You...&#34;,
      &#34;isDeleted&#34;: false,
      &#34;parentReviewId&#34;: 53,
      &#34;createdDate&#34;: &#34;2018-05-08T12:32:43.033&#34;,
      &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
      &#34;bookingId&#34;: 62,
      &#34;startDate&#34;: &#34;2018-05-08T12:29:00&#34;,
      &#34;endDate&#34;: &#34;2018-05-08T14:29:00&#34;,
      &#34;serviceName&#34;: &#34;Security&#34;,
      &#34;businessId&#34;: 0,
      &#34;businessProfilePic&#34;: &#34;&#34;
    },
    {
      &#34;firstName&#34;: &#34;Satya Indra&#34;,
      &#34;lastName&#34;: &#34;varada&#34;,
      &#34;profilePic&#34;: &#34;3354757569.jpg&#34;,
      &#34;reviewId&#34;: 53,
      &#34;userId&#34;: 9,
      &#34;serviceProviderId&#34;: 0,
      &#34;rating&#34;: 4,
      &#34;description&#34;: &#34;nice service...&#34;,
      &#34;isDeleted&#34;: false,
      &#34;parentReviewId&#34;: 0,
      &#34;createdDate&#34;: &#34;2018-05-08T12:31:44.313&#34;,
      &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
      &#34;bookingId&#34;: 62,
      &#34;startDate&#34;: &#34;2018-05-08T12:29:00&#34;,
      &#34;endDate&#34;: &#34;2018-05-08T14:29:00&#34;,
      &#34;serviceName&#34;: &#34;Security&#34;,
      &#34;businessId&#34;: 0,
      &#34;businessProfilePic&#34;: &#34;&#34;
    },
    {
      &#34;firstName&#34;: &#34;Mark&#34;,
      &#34;lastName&#34;: &#34;King&#34;,
      &#34;profilePic&#34;: &#34;avatar2 - Copy - Copy.jpg&#34;,
      &#34;reviewId&#34;: 52,
      &#34;userId&#34;: 4,
      &#34;serviceProviderId&#34;: 0,
      &#34;rating&#34;: 0,
      &#34;description&#34;: &#34;sorry for the trouble&#34;,
      &#34;isDeleted&#34;: false,
      &#34;parentReviewId&#34;: 9,
      &#34;createdDate&#34;: &#34;2018-05-07T11:52:23.81&#34;,
      &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
      &#34;bookingId&#34;: 16,
      &#34;startDate&#34;: &#34;2018-04-24T11:30:00&#34;,
      &#34;endDate&#34;: &#34;2018-04-24T12:30:00&#34;,
      &#34;serviceName&#34;: &#34;Cleaning&#34;,
      &#34;businessId&#34;: 2,
      &#34;businessProfilePic&#34;: &#34;logo-home.png&#34;
    },
    {
      &#34;firstName&#34;: &#34;James&#34;,
      &#34;lastName&#34;: &#34;Miller&#34;,
      &#34;profilePic&#34;: &#34;avatar.jpg&#34;,
      &#34;reviewId&#34;: 9,
      &#34;userId&#34;: 7,
      &#34;serviceProviderId&#34;: 0,
      &#34;rating&#34;: 2,
      &#34;description&#34;: &#34;bad&#34;,
      &#34;isDeleted&#34;: false,
      &#34;parentReviewId&#34;: 0,
      &#34;createdDate&#34;: &#34;2018-04-24T23:59:06.357&#34;,
      &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
      &#34;bookingId&#34;: 16,
      &#34;startDate&#34;: &#34;2018-04-24T11:30:00&#34;,
      &#34;endDate&#34;: &#34;2018-04-24T12:30:00&#34;,
      &#34;serviceName&#34;: &#34;Cleaning&#34;,
      &#34;businessId&#34;: 2,
      &#34;businessProfilePic&#34;: &#34;logo-home.png&#34;
    },
    {
      &#34;firstName&#34;: &#34;Mark&#34;,
      &#34;lastName&#34;: &#34;King&#34;,
      &#34;profilePic&#34;: &#34;avatar2 - Copy - Copy.jpg&#34;,
      &#34;reviewId&#34;: 2,
      &#34;userId&#34;: 4,
      &#34;serviceProviderId&#34;: 0,
      &#34;rating&#34;: 0,
      &#34;description&#34;: &#34;Thank you&#34;,
      &#34;isDeleted&#34;: false,
      &#34;parentReviewId&#34;: 1,
      &#34;createdDate&#34;: &#34;2018-04-20T14:57:29.073&#34;,
      &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
      &#34;bookingId&#34;: 2,
      &#34;startDate&#34;: &#34;2018-04-25T00:00:00&#34;,
      &#34;endDate&#34;: &#34;2018-04-26T09:00:00&#34;,
      &#34;serviceName&#34;: &#34;Security&#34;,
      &#34;businessId&#34;: 0,
      &#34;businessProfilePic&#34;: &#34;&#34;
    },
    {
      &#34;firstName&#34;: &#34;James&#34;,
      &#34;lastName&#34;: &#34;Miller&#34;,
      &#34;profilePic&#34;: &#34;avatar.jpg&#34;,
      &#34;reviewId&#34;: 1,
      &#34;userId&#34;: 7,
      &#34;serviceProviderId&#34;: 0,
      &#34;rating&#34;: 4,
      &#34;description&#34;: &#34;Great&#34;,
      &#34;isDeleted&#34;: false,
      &#34;parentReviewId&#34;: 0,
      &#34;createdDate&#34;: &#34;2018-04-20T14:56:57.34&#34;,
      &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
      &#34;bookingId&#34;: 2,
      &#34;startDate&#34;: &#34;2018-04-25T00:00:00&#34;,
      &#34;endDate&#34;: &#34;2018-04-26T09:00:00&#34;,
      &#34;serviceName&#34;: &#34;Security&#34;,
      &#34;businessId&#34;: 0,
      &#34;businessProfilePic&#34;: &#34;&#34;
    }
]
</code></pre>

<p>这里所有的字典都代表一个数组中的评论和评论。不同之处在于任何评论的 bookingId 将与回复相同,评论的 reviewId 将等于回复的 parentReviewId。如果已经有回复,则应在下方显示相应的评论,如果没有回复,我们应该能够通过单击评论单元格中的回复按钮来添加它。这就是这个概念,我真的试过了,我做不到。希望你们能帮助我做到这一点..提前感谢您的帮助..</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>API 响应的最佳实践应该是,回复应该在评论字典中。喜欢:</p>

<pre><code>{
    &#34;firstName&#34;: &#34;James&#34;,
    &#34;lastName&#34;: &#34;Miller&#34;,
    &#34;profilePic&#34;: &#34;avatar.jpg&#34;,
    &#34;reviewId&#34;: 9,
    &#34;userId&#34;: 7,
    &#34;serviceProviderId&#34;: 0,
    &#34;rating&#34;: 2,
    &#34;description&#34;: &#34;bad&#34;,
    &#34;isDeleted&#34;: false,
    &#34;parentReviewId&#34;: 0,
    &#34;createdDate&#34;: &#34;2018-04-24T23:59:06.357&#34;,
    &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
    &#34;bookingId&#34;: 16,
    &#34;startDate&#34;: &#34;2018-04-24T11:30:00&#34;,
    &#34;endDate&#34;: &#34;2018-04-24T12:30:00&#34;,
    &#34;serviceName&#34;: &#34;Cleaning&#34;,
    &#34;businessId&#34;: 2,
    &#34;businessProfilePic&#34;: &#34;logo-home.png&#34;
    &#34;replies&#34;: [
            {
                &#34;firstName&#34;: &#34;Mark&#34;,
                &#34;lastName&#34;: &#34;King&#34;,
                &#34;profilePic&#34;: &#34;avatar2 - Copy - Copy.jpg&#34;,
                &#34;reviewId&#34;: 52,
                &#34;userId&#34;: 4,
                &#34;serviceProviderId&#34;: 0,
                &#34;rating&#34;: 0,
                &#34;description&#34;: &#34;sorry for the trouble&#34;,
                &#34;isDeleted&#34;: false,
                &#34;parentReviewId&#34;: 9,
                &#34;createdDate&#34;: &#34;2018-05-07T11:52:23.81&#34;,
                &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
                &#34;bookingId&#34;: 16,
                &#34;startDate&#34;: &#34;2018-04-24T11:30:00&#34;,
                &#34;endDate&#34;: &#34;2018-04-24T12:30:00&#34;,
                &#34;serviceName&#34;: &#34;Cleaning&#34;,
                &#34;businessId&#34;: 2,
                &#34;businessProfilePic&#34;: &#34;logo-home.png&#34;
            },
            {
                &#34;firstName&#34;: &#34;Mark&#34;,
                &#34;lastName&#34;: &#34;King&#34;,
                &#34;profilePic&#34;: &#34;avatar2 - Copy - Copy.jpg&#34;,
                &#34;reviewId&#34;: 60,
                &#34;userId&#34;: 4,
                &#34;serviceProviderId&#34;: 0,
                &#34;rating&#34;: 0,
                &#34;description&#34;: &#34;sorry for the trouble new&#34;,
                &#34;isDeleted&#34;: false,
                &#34;parentReviewId&#34;: 9,
                &#34;createdDate&#34;: &#34;2018-05-07T11:52:23.81&#34;,
                &#34;modifiedDate&#34;: &#34;0001-01-01T00:00:00&#34;,
                &#34;bookingId&#34;: 16,
                &#34;startDate&#34;: &#34;2018-04-24T11:30:00&#34;,
                &#34;endDate&#34;: &#34;2018-04-24T12:30:00&#34;,
                &#34;serviceName&#34;: &#34;Cleaning&#34;,
                &#34;businessId&#34;: 2,
                &#34;businessProfilePic&#34;: &#34;logo-home.png&#34;
            }
      ]
}
</code></pre>

<p>但在当前情况下,您可以检查 <code>parentReviewId</code>。如果为<strong>0</strong>,则为回复,否则为评论。你可以这样:</p>

<pre><code>    let responseArray = []() // This is array fro your question

    // Extract commentArray
    let commentArray = responseArray.filter( { Int(exactly: $0[&#34;parentReviewId&#34;] as! NSNumber) == 0} )
    // Load updatedResponseArray with relpies into it
    var updatedResponseArray = []()

    for itemDict in commentArray {
      let reviewId = Int(exactly: itemDict[&#34;reviewId&#34;] as! NSNumber) ?? 0
      let replies = responseArray.filter( { Int(exactly: $0[&#34;parentReviewId&#34;] as! NSNumber) == reviewId} )

      var dict = itemDict
      dict[&#34;replies&#34;] = replies
      updatedResponseArray.append(dict)
    }

    print(updatedResponseArray)
</code></pre>

<p>现在,您可以使用此 <code>updatedResponseArray</code>,字典中的主要详细信息是评论,并且您在 <code>replies</code> 键中有对该评论的相关回复。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 iOS swift 中实现评论和回复系统,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/50312995/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/50312995/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 iOS swift 中实现评论和回复系统