首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >iOS- Chatto框架聊天删除

iOS- Chatto框架聊天删除
EN

Stack Overflow用户
提问于 2020-01-14 06:36:25
回答 1查看 74关注 0票数 0

我一直在使用Chatto框架在聊天应用程序中工作。一切都很好。现在我想从SlidingDataSource类的DataSource中删除一条聊天消息。数组的索引由windowOffsetitemsOffsetwindowCount等属性以及数组的计数处理。如果有人在Chatto中使用过delete操作,请解释一下属性或提供一个简单的delete函数会很有帮助。谢谢。我在这里附上了数据源代码..

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Foundation
import Chatto

public enum InsertPosition {
    case top
    case bottom
}

public class SlidingDataSource<Element> {

    private var pageSize: Int
    private var windowOffset: Int
    private var windowCount: Int
    private var itemGenerator: (() -> Element)?
    private var items = [Element]()
    private var itemsOffset: Int
    public var itemsInWindow: [Element] {
        let offset = self.windowOffset - self.itemsOffset
        return Array(items[offset..<offset+self.windowCount])
    }

    public init(count: Int, pageSize: Int, itemGenerator: (() -> Element)?) {
        self.windowOffset = count
        self.itemsOffset = count
        self.windowCount = 0
        self.pageSize = pageSize
        self.itemGenerator = itemGenerator
        self.generateItems(min(pageSize, count), position: .top)
    }

    public convenience init(items: [Element], pageSize: Int) {
        var iterator = items.makeIterator()
        self.init(count: items.count, pageSize: pageSize) { iterator.next()! }
    }

    private func generateItems(_ count: Int, position: InsertPosition) {
        // swiftlint:disable:next empty_count
        guard count > 0 else { return }
        guard let itemGenerator = self.itemGenerator else {
            fatalError("Can't create messages without a generator")
        }
        for _ in 0..<count {
            self.insertItem(itemGenerator(), position: .top)
        }
    }

    public func insertItem(_ item: Element, position: InsertPosition) {
        if position == .top {
            self.items.insert(item, at: 0)
            let shouldExpandWindow = self.itemsOffset == self.windowOffset
            self.itemsOffset -= 1
            if shouldExpandWindow {
                self.windowOffset -= 1
                self.windowCount += 1
            }
        } else {
            let shouldExpandWindow = self.itemsOffset + self.items.count == self.windowOffset + self.windowCount
            if shouldExpandWindow {
                self.windowCount += 1
            }
            self.items.append(item)
        }
    }

    public func hasPrevious() -> Bool {
        return self.windowOffset > 0
    }

    public func hasMore() -> Bool {
        return self.windowOffset + self.windowCount < self.itemsOffset + self.items.count
    }

    public func loadPrevious() {
        let previousWindowOffset = self.windowOffset
        let previousWindowCount = self.windowCount
        let nextWindowOffset = max(0, self.windowOffset - self.pageSize)
        let messagesNeeded = self.itemsOffset - nextWindowOffset
        if messagesNeeded > 0 {
            self.generateItems(messagesNeeded, position: .top)
        }
        let newItemsCount = previousWindowOffset - nextWindowOffset
        self.windowOffset = nextWindowOffset
        self.windowCount = previousWindowCount + newItemsCount
    }

    public func loadNext() {
        guard !self.items.isEmpty else { return }
        let itemCountAfterWindow = self.itemsOffset + self.items.count - self.windowOffset - self.windowCount
        self.windowCount += min(self.pageSize, itemCountAfterWindow)
    }

    @discardableResult
    public func adjustWindow(focusPosition: Double, maxWindowSize: Int) -> Bool {
        assert(0 <= focusPosition && focusPosition <= 1, "")
        guard 0 <= focusPosition && focusPosition <= 1 else {
            assert(false, "focus should be in the [0, 1] interval")
            return false
        }
        let sizeDiff = self.windowCount - maxWindowSize
        guard sizeDiff > 0 else { return false }
        self.windowOffset +=  Int(focusPosition * Double(sizeDiff))
        self.windowCount = maxWindowSize
        return true
    }

    @discardableResult
    func replaceItem(withNewItem item: Element, where predicate: (Element) -> Bool) -> Bool {
        guard let index = self.items.firstIndex(where: predicate) else { return false }
        self.items[index] = item
        return true
    }
    func contains(item: Element, where predicate: (Element) -> Bool ) -> Bool {
        guard let _ = self.items.firstIndex(where: predicate) else { return false }
        return true
    }
    //FIXME: Add delete method here, don't know the use off itemOffset, windowOffset, windowCount

    //    func delete(item: Element, where predicate: (Element) -> Bool ) {
    //        self.items.removeAll(where: predicate)
    //    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 05:14:40

我在他们的Github库中提出了一个问题。这是他们回答的解决方案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
when delete or add a new element in data source you need to -1 or +1 to offset. If offset is 0 - do nothing.

Originial answer link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59728618

复制
相关文章
Ios常用第三方框架(二)
图表 PNChart - 国内开源作者,动态的图表。 swift-linechart - 功能完整、实用的折线图组件。使用方便,参数配置简单。是不可多得的优质组件--swift。 ios-charts - 一款优秀 Android 图表开源库 MPAndroidChart 的 Swift 语言实现版(支持 Objective-C 和 Swift 调用)。缺省提供的示例代码为 Objective-C。 TEAChart - xhacker/TEAChart 一个简洁的 iOS 图表库,支持柱状图、饼图
honey缘木鱼
2018/09/26
7.8K0
iOS-定位
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
GuangdongQi
2021/11/24
1.4K0
iOS-定位
IOS-多线程
开辟空间alloc,并且赋予一个地址指针,方便管理,通过链表结构(方便增删,不便查找)所以通过类似数组的形式,给开辟的空间一个指针地址,由栈->指针地址才能找到该存在于堆区的内存空间.
Wilbur-L
2020/12/14
7250
IOS-多线程
iOS-底层原理
一·底层原理之alloc Alloc 二·底层原理之类 类原理 1.bits 2.cache 类加载 read_image 三·底层原理之OC方法 objc_msgSend 四·底层原理之多线程 GCD 五·底层原理之Block Block 六·内存管理 内存管理(一) 内存管理(二)
Wilbur-L
2020/12/25
6490
iOS-圆角、边框、阴影
圆角 给view设置圆角,只需要设置view的layer属性的conrnerRadius,它表示图层角的曲率,默认值是0 圆角还可以用贝塞尔曲线来切,这样还可以实现单切某一个角,其它角不切的效果,我的demo中就是用该方法实现的,有兴趣的可以下下来看一看 conrnerRadius只影响背景颜色不影响背景图和子图层,所以往往我们在设置圆角时还会开启view的masksToBounds(剪裁属性),当设置成YES时,图层里面所有东西都会被截取 边框 边框需要设置layer的两个属性,borderW
用户2215591
2018/06/29
2.8K0
iOS-如何创建一个新的App基础框架
删掉自带的ViewController,并且分别创建Main ViewController View Model
Wilbur-L
2021/09/24
1.2K0
iOS-内存管理(一)
heap: which is created objc and block by alloc will store in heap area
Wilbur-L
2020/12/18
9860
iOS-内存管理(一)
iOS-多线程详解
欢迎大家指出文章中需要改正或者需要补充的地方,我会及时更新,非常感谢。 一. 多线程基础 1. 进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 2.线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程,称为主线程) 一个进程(程序)的所有任务都在线程中执行 3. 进程和线程的比较 1.线程是CPU调用(执行任务)的最小单位。 2.进程是CPU分配资源的最小单位。 3.一个进程中至少要有一个线程。 4
xx_Cc
2018/05/10
2.2K0
iOS-文本转语音
iOS提供了一个类AVSpeechSynthesizer来实现文本到语音的功能, 即读出文字
周希
2019/10/15
7590
iOS-安装和使用 CocoaPods
2017年06月07日更新: rvm、ruby环境配置 将淘宝源移除,用ruby-china替换 一、安装rvm环境 检查rvm环境,终端输入指令: rvm -v 输出(如果输出如下内容证明不存在rvm环境,如果存在请跳过此步骤) -bash: rvm: command not found 安装配置 rvm 环境 curl -L https://get.rvm.io | bash -s stable 安装rvm成功的输出 % Total % Received % Xferd Average Spe
用户1890628
2018/05/10
3.9K0
iOS-宏定义-颜色设置
1. RGB颜色 + A透明度 /** RGB颜色 + A透明度 */ #define HQRGBAColor(r, g, b, a) [UIColor colorWithRed:(r) / 255.0 green:(g) / 255.0 blue:(b) / 255.0 alpha:(a)] 2. RGB颜色 /** RGB颜色 */ #define HQRGBColor(r, g, b) HQRGBAColor(r, g, b, 1.0) 3. 随机
用户1890628
2018/05/10
1.2K0
苹果手机QQ聊天记录删除了怎么恢复
很多果粉都有过苹果手机QQ聊天记录删除了怎么恢复的疑问,随着微信的普及,在生活上使用QQ的人越来越少,但工作上,QQ还是最主要的通讯工具,很多公司网站上都设有客服QQ,但并未设置客服微信。微信用于生活上的私聊,而QQ则用于工作上的业务联系已成为当前社交软件格局。今天我来教大家如何恢复iPhone手机上不小心删除的手机QQ聊天记录。
李洋博客
2021/06/15
3.9K0
iOS-代码规范
利用上周的业余时间把这篇规范整理了出来,我会将这篇规范作为我们iOS团队的代码规范,并且还会根据读者的反馈,项目的实践和研究的深入做不定时更新,还希望各位朋友看了多多指正和批评。
用户1740424
2018/07/23
2.2K0
iOS-代码规范
Rafy 框架 - 幽灵插件(假删除)
Rafy 框架又添新成员:幽灵插件。本文将解释该插件的场景、使用方法、原理。 场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为‘已删除’状态。这些数据在业务逻辑上是已经完全删除、不可用的数据,但是不能在数据库中真正的把它们删除,而是需要永久保留这些历史数据。即开发人员常说的‘假删除’功能。 这种需求往往是系统级的。往往不是针对某一张表,而很可能是针对系统中的所有表都需要实现‘假删除’功能。 使用方法 由于这种需求比较常见,所以我们决定专门为该功能写一个独立的 Ra
用户1172223
2018/01/29
1.2K0
Rafy 框架 - 幽灵插件(假删除)
OPPO手机微信聊天记录删除了怎么恢复
OPPO手机微信聊天记录删除了怎么恢复是很多OPPO用户所关注的一个问题,想要恢复删除过的聊天记录都必须要先对手机进行ROOT操作,但现在的OPPO手机基本上都已经无法再ROOT,于是,想要恢复OPPO手机中删除过的微信聊天记录基本上是不可能了的。但经过小编这几天的研究出了一种无需ROOT导出OPPO手机中的聊天记录到电脑上保存的方法来分享给大家,希望大家在删除聊天记录之前能对手机微信聊天记录进行一个导出保存。
一身烟酒味
2019/09/10
12.8K0
OPPO手机微信聊天记录删除了怎么恢复
【开发环境】Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )
首先到 /Library/Frameworks/Python.framework/Versions/ 目录中 , 删除 Python 本体 ;
韩曙亮
2023/03/29
1.2K0
【开发环境】Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )
如何找回苹果手机删除的微信聊天记录
微信里把别人删了bai之后,自己手机du微信上的联系人、消息聊天窗口和记录都zhi会删除。
用户7475317
2020/06/18
3K0
微信删除聊天记录怎么找回?轻松帮你搞定
  微信删除聊天记录怎么找回?我们在使用微信的时候都会遇到这样的一个问题,当我们在查看聊天记录是会发现有些记录不在手机中,那么这种可能是将里面的聊天记录删除了,但是如果想要将聊天记录恢复回来该怎么做?这个时候我们该怎么去解决呢?微信删除聊天记录怎么找回?
科技第六人
2019/10/09
3.9K2
微信删除聊天记录怎么找回?轻松帮你搞定
删除的微信聊天记录,这技巧能恢复
哈喽各位小伙伴今天有点晚 最近很多小伙伴来问柚子微信聊天记录恢复的问题 柚子觉得这个问题还是要和大家好好说下 柚子这几天也一直在寻找各种方法 试验各种恢复的方法 一般来说基本没办法恢复的 如果你经常在
IT小侠公社
2019/06/12
1.1K0
删除的微信聊天记录,这技巧能恢复
点击加载更多

相似问题

使用Chatto库ios更新聊天气泡中的图像

120

删除聊天- XMPP框架-目标-C

15

iOS-解析框架嵌套查询

11

iOS-通用框架安装问题

11

ios- sqLite不删除行

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文