实战问题
我正在开发一个 SwiftUI 应用程序,我想在文本视图中选择文本并在选择的开头插入一些文本。SwiftUI 的本机文本编辑器目前不支持获取选择范围,因此我必须包装 AppKit 文本视图并在选择更改时存储选择范围。
func textViewDidChangeSelection(_ notification: Notification) {
guard let textView = notification.object as?
NSTextView else {
return
}
control.model.selectionRange =
Range.init(textView.selectedRange())
}
上一个示例中的代码为我提供了一个 Swift 范围,它使用整数Range
model.text.insert(contentsOf: textToInsert,
at: model.selectionRange?.startIndex)
但是编译器给了我一个错误。错误的原因是String结构的insert方法采用使用字符串索引的范围Range
解决方案
解决方案是为字符串创建一个字符串索引并将其用作insert方法的参数。字符串索引的基础是字符串的起始索引。字符串索引的偏移量是选择范围的下限。
let insertionPoint = model.text.index(model.text.startIndex,
offsetBy: model.selectionRange?.lowerBound ?? 0)
model.text.insert(contentsOf: textToInsert, at: insertionPoint)
精品教程推荐
加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com