无法将“Range<String.Index>”类型的值转换为预期的参数类型“UITextRange”

Posted

技术标签:

【中文标题】无法将“Range<String.Index>”类型的值转换为预期的参数类型“UITextRange”【英文标题】:Cannot convert value of type 'Range<String.Index>' to expected argument type 'UITextRange' 【发布时间】:2017-09-25 12:56:14 【问题描述】:

如何根据字符串创建范围。使用下面的代码,我收到错误“无法将'Range'类型的值转换为预期的参数类型'UITextRange'”。仅供参考 print(firstString[range]) 成功输出“xxx”。

class ViewController: UIViewController 
  @IBOutlet weak var textView: UITextView!
  let firstString: String = "xxx"
  let secondString: String = "yyy"

  override func viewDidLoad() 
    super.viewDidLoad()
    textView.text = firstString
  

  func replace() 
    var finalString: String?
    let range = firstString.startIndex..<firstString.endIndex
    print(firstString[range])
    textView.replace(range, withText: secondString)
  

  @IBAction func replaceButton(_ sender: Any) 
    replace()
  

【问题讨论】:

试试textView.text.replace(range, withText: secondString) 【参考方案1】:

您的代码中有两个问题。首先,您需要在 textView 文本属性中应用您的方法。第二个问题是您使用了错误的方法,要替换字符串的范围,您需要使用 replaceSubrange 方法。所以你的代码应该是这样的:

textView.text.replaceSubrange(range, with: secondString)

【讨论】:

以上是关于无法将“Range<String.Index>”类型的值转换为预期的参数类型“UITextRange”的主要内容,如果未能解决你的问题,请参考以下文章

无法转换类型“Range<Int>?”的值到预期的参数类型'Range<String.Index>?

如何将 Range<String.Index> 转换为 NSRange? [复制]

如何在 NSRange 中转换范围? [复制]

Swift截取字符串(转载)

使用NSStringEnumerationOptions.ByWords获取错误 - Swift 4.2

SQL Server Management Studio 无法将类型为“System.__ComObject