Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 慢速NSAttribute字符串呈现_Swift_String_Performance_Rendering - Fatal编程技术网

Swift 慢速NSAttribute字符串呈现

Swift 慢速NSAttribute字符串呈现,swift,string,performance,rendering,Swift,String,Performance,Rendering,我正在开发一个用于文本编辑的应用程序,当我输入超过10000时,该应用程序的速度非常慢。我在打字时运行了一些for循环,但这应该是一件大事。是否可以在向下滚动时加载文本、分块或其他内容?如调度等?我正在使用NSAttribute字符串 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

我正在开发一个用于文本编辑的应用程序,当我输入超过10000时,该应用程序的速度非常慢。我在打字时运行了一些for循环,但这应该是一件大事。是否可以在向下滚动时加载文本、分块或其他内容?如调度等?我正在使用NSAttribute字符串

        func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
    {

        textView.textStorage.addAttribute(NSForegroundColorAttributeName, value: styles.titleTextColor().withAlphaComponent(0.10), range: NSMakeRange(0, textView.attributedText.length))

        let textRange: UITextRange? = textView.tokenizer.rangeEnclosingPosition((textView.selectedTextRange?.start)!, with: UITextGranularity.sentence, inDirection: 1)

        if textRange != nil
        {
            let sentenceRange = textView.rangeFromTextRange(textRange: textRange!)
            textView.textStorage.addAttribute(NSForegroundColorAttributeName, value: styles.titleTextColor().withAlphaComponent(1), range: sentenceRange)
        }

    }

    extension UITextView
{
    func rangeFromTextRange(textRange: UITextRange) -> NSRange
    {
        let location : Int = self.offset(from: self.beginningOfDocument, to: textRange.start)
        let length : Int = self.offset(from: textRange.start, to: textRange.end)

        return NSMakeRange(location, length)
    }

你能分享你的代码吗<代码>分派和
延迟加载
可以是一个答案,但如果没有您的代码,我无法判断哪一个有效。@Rahul我更新了我的问题,请检查我是否收到此错误
错误:类型为“UITextView”的值没有成员“rangeFromTextRange”让sentenceRange=textView.rangeFromTextRange(textRange:textRange!)^~~~~~~~~~~~~~~~~~~~~~
这意味着textView没有任何成员作为
rangeFromTextRange
。我想您正在寻找
selectedRange
extension UITextView{func range fromtextrange(textRange:uitextange)->NSRange{let location:Int=self.offset(from:self.beginingofdocument,to:textRange.start)let length:Int=self.offset(from:textRange.start,to:textRange.end)return NSMakeRange(location,length)}我无法找出确切的问题,但我想到的一个解决方案是在调度队列中放置两个操作。
DispatchQueue.main.async{let sentenceRange=textView.rangeFromTextRange(textRange:textRange!)textView.textStorage.addAttribute(NSForegroundColorAttributeName,值:styles.titleTextColor().withAlphaComponent(1),range:sentenceRange)}