[绍棠_Swift] swift4.0 NSMutableAttributeString的Range和NSRange问题
Range是无法通过 as? 强制转换到NSRange的。
强制转换会crash Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1000b4488)
var mutableAttrStr = NSMutableAttributedString.init()
// range 不能用as? 强制转换
let substringRange = mutableAttrStr.string.range(of: friendModel.userName!)
friendModel.range = mutableAttrStr.string.nsRange(from: substringRange!)
//range转换为NSRange
//扩展的是String类,不可改为NSRange或者Range的扩展,因为samePosition,utf16是String里的
extension String {
func nsRange(from range: Range<String.Index>) -> NSRange {
let from = range.lowerBound.samePosition(in: utf16)
let to = range.upperBound.samePosition(in: utf16)
return NSRange(location: utf16.distance(from: utf16.startIndex, to: from),
length: utf16.distance(from: from, to: to))
}
}
//NSRange转化为range
//扩展的是String类,不可改为NSRange或者Range的扩展,因为utf16是String里的
extension String {
func range(from nsRange: NSRange) -> Range<String.Index>? {
guard
let from16 = utf16.index(utf16.startIndex, offsetBy: nsRange.location, limitedBy: utf16.endIndex),
let to16 = utf16.index(from16, offsetBy: nsRange.length, limitedBy: utf16.endIndex),
let from = String.Index(from16, within: self),
let to = String.Index(to16, within: self)
else { return nil }
return from ..< to
}
}
[绍棠_Swift] swift4.0 NSMutableAttributeString的Range和NSRange问题相关推荐
- [绍棠_Swift] Swift3.0中guard语句的使用和理解
和if一样,guard是基于一个表达式的布尔值去判断某些代码是否该被执行,和if不一样的地方是,guard只有在条件不满足(布尔值==false时)才会执行,类似反if.通过伪代码来直观的感受一下 首 ...
- [绍棠_Swift] SwiftyJSON的使用详解(附样例,用于JSON数据处理)
1,SwiftyJSON介绍与配置 SwiftyJSON是个使用Swift语言编写的开源库,可以让我们很方便地处理JSON数据(解析数据.生成数据). GitHub地址:https://github. ...
- [绍棠_Swift] Swift中类和结构体的区别
类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型.所以 ...
- 关于Swift4.0 Method Swizzling(iOS的hook机制)使用
2019独角兽企业重金招聘Python工程师标准>>> 关于Method Swizzling 原理什么的有很多帖子讲述的已经很清楚这里不再赘述, 这里仅仅处理Method Swizz ...
- Swift4.0复习特性、编译标志和检查API的可用性
1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...
- swift4.0语法杂记(精简版)
小视频 001--swift简史小视频 002--Playground体验 003--常量&变量 一.swift简史 1.介绍 swift是苹果公司于2014年推出用于撰写OS和iOS应用程序 ...
- swift4.0语法杂记
原文地址:https://www.jianshu.com/p/06b9ddf748f7 (如有侵权,请联系我删除.) 小视频 001--swift简史小视频 002--Playground体验 003 ...
- Swift4.0判断本函数是否在其它类有相同的方法
组件化开发模式化,为了减少AppDelegate.m做很多事情会做几个组件来分担它的功能,因此他们的函数名相同. Object C判断本函数是否在其它类有相同的方法很简单,通过_cmd就能很快判断出来 ...
- ios swift5 Range转NSRange
extension String {/// range转换为NSRangefunc nsRange(from range: Range<String.Index>) -> NSRan ...
最新文章
- hive sql 报错后继续执行_Hive迁移Presto的技术实践
- 透彻理解Spring事务设计思想之手写实现
- 机器学习(二)Logistic回归(Logistic regression)算法
- NodeJS通过ffi调用DLL
- UNIX(进程间通信):03---僵尸进程
- Python中的三目运算符
- 190505每日一句
- Redis开发与运维教程
- 音频编辑软件有哪些?推荐几款简单的音频编辑软件
- python算术平方根_Python 平方根
- 记录阿里云增加二级域名步骤[同三级]
- Windwos cwRsync 服务端及客户端安装配置全攻略
- 电子邮件邮箱怎么设置签名?手机邮箱签名设置攻略
- 未来测试软件推荐,未来函数检测工具优化版(支持所有股软未来检测)
- Android--DES加密解密
- 电脑版适合什么插件HTML,推荐一些好用的Chrome插件
- js+css如何制作(音频)图标【切换播放动画】效果?
- Java中哈希集(HashSet)概念,实现以及操作
- ZipFile解压文件
- c oracle帮助文档下载,Oracle 19c 官方文档——Concepts