Swift中NSRange和Range的转换
最近项目再使用swift重构,遇到Range和NSRange转换的问题,这里记录下:
因为要使用NSRange,所以有了下面这段代码,将String转换为NSString后调用 range(of searchString: String) -> NSRange
这种处理方法其实就是使用到了OC的方法了
let textStr = "登陆及代表同意《用户协议》与《隐私政策》"
//获取NSRange
let range = NSString(string: textStr).range(of: "《隐私政策》")
以下为其他转换方法:
extension String {//Range转换为NSRangefunc toNSRange(_ range: Range<String.Index>) -> NSRange {guard let from = range.lowerBound.samePosition(in: utf16), let to = range.upperBound.samePosition(in: utf16) else {return NSMakeRange(0, 0)}return NSMakeRange(utf16.distance(from: utf16.startIndex, to: from), utf16.distance(from: from, to: to))}//NSRange转换为Rangefunc toRange(_ range: NSRange) -> Range<String.Index>? {guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }guard let from = String.Index(from16, within: self) else { return nil }guard let to = String.Index(to16, within: self) else { return nil }return from ..< to}}
使用如下:
let textStr = "登陆及代表同意《用户协议》与《隐私政策》"
//Range->NSRange
let nsrange = textStr.toNSRange(linkStr.range(of: "《隐私政策》")
//NSRange->Range
let range = textStr.toRange(nsrange)
相关文章:

C++基础技术简介
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 容器 容器用于存储数据元素,是由长度可变的同类型的元素构建成的序列。 Vector:用于快速定位任意元素及主要在元素序列的尾…

eclipse快捷键操作
【Ct rlT】 搜索当前接口的实现类 1. 【ALT /】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT /】快捷键带来的好处吧。 2. 【Ct rlO】…

vue 项目配置sass
1.运行npm install node-sass --save-dev npm install sass-loader --save-dev 2.打开build文件夹下面的webpack.base.config.js module: {rules: [...(config.dev.useEslint ? [createLintingRule()] : []),{test: /\.scss$/,loaders: ["style", "css", …

获取App Store中App的ipa包
俗话说好记性不如烂笔头,每次需要看别的App中某些功能的实现方案时总去查资料太麻烦,所以这里记录下如何获取App Store中App的ipa包 主要使用的工具为Apple Configurator 2这款软件: 具体操作流程如下: 1.首先在iPhone设备上安装…

区块链中的技术
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 应用技术 算法加密1 比特币采用椭圆曲线加密算法(ECC)来产生公钥和私钥对,钱包地址即是公钥,私钥由…

h.264 FMO
在H.264之前的标准中,比如H.263,其比特流中的数据是按照一个宏块接一个宏块的方式排列的,一旦发生丢包,很多相邻宏块信息都会丢失,很难进行错误隐藏处理。在H.264中加入了一项新特性:把宏块在比特流中的数据…

lvs+keepalived+nginx+tomcat
# 拓扑如下所示 # 节点分布情况 LVS-dr-master eth0: 192.168.146.141 LVS-dr-slave eth0: 192.168.146.142 nginx1: eth0: 192.168.146.139 nginx2: eth0: 192.168.146.140 tomcat1: eth0: 192.168.146.138 启用了4个tomcat VIP: 192.168.146.200 # 具体配置 ### lvs master #…

iOS 关于pods-frameworks.sh:permission denied报错的解决
最近公司新开项目,搭建完框架后小伙伴拉取代码后build一直报错:pods-frameworks.sh:permission denied 查了很多博文后找到了如下解决方案,在此记录。 打开终端输入如下命令行回车即可: chmod ax "/Users/xxx/Pods/Pods-re…

区块链分布式账本
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 账本是具有一定格式和许多账页组成的,以会计凭证为基础,对经济业务进行序时分类记录,也就是所说的账册。 账本在…

jmeter实现多并发
1.jmeter实现多并发 线程组:负载发生器,用以多线程或多进程的方式来模拟用户的使用行为.jmeter是以线程的方式来进行模拟用户的并发访问的 转载于:https://www.cnblogs.com/xuzhongtao/p/8526502.html

循环语句——7月23日
循环语句:for 格式: for (int i 1/*初始条件*/; i < 100/* 循环条件*/; i /*状态改变*/) { //循环体,执行代码;(break;跳出循环体) } 给出初始条件,先判断是否满足循环条件,如果不满足条件则跳过for语句…

CocoaPods私有库搭建的记录
前言 随着项目的业务增加以及马甲包进度的跟进,一些重复的独立业务以私有库的方式引入到项目中对于项目进度的开发就显得越发的迫切了,本文主要记录自己搭建私有库时的整个流程,以防后面再次搭建时忘记,方便自己查阅。 整个记录…

区块链笔记-Hash算法
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链笔记-Hash算法 区块链技术是一系列技术的结合,建立新的技术架构,hash算法是很重要的一块,如果理解不当的…

Thrift源码解析--TBinaryProtocol
本文为原创:http://www.cnblogs.com/leehfly/p/4958206.html,未经许可禁止转载。 关于Tprotocol层都是一些通信协议,个人感觉内容较大,很难分类描述清楚。故打算以TBinaryProtocol为例,分析客户端发请求以及接收服务端返回数据的整…

一篇价值百万的文章:我为什么在22岁辞去年薪150万的工作?
本文转载自http://www.cricode.com/4208.html 作者:奶牛Denny 今天是22岁的最后一天。几个月前,我从沃顿商学院毕业,用文凭上“最高荣誉毕业”的标签安抚了已经年过半百的老妈,然后转头辞去了毕业后的第一份工作,跟一…

电脑温度检测软件哪个好_一般电脑录音软件哪个好?
随着科技的快速发展,为了满足各行各业的音频录制需求,电脑版录音软件也在陆续不断的出现在各大应用市场,与传统的自带音频录制工具相比,电脑版录音软件更加专注的是电脑上的音频录制,它能够将发生在电脑上的一切声音源…

区块链的隐私性
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 我最近看区块链简单介绍的时候会发现有的人就说其有良好的隐私性,但也有人说保护隐私性上有缺陷,今天就简单的对区块链的隐私…

ssh免密连接远程服务器
ssh免密连接远程服务器 借助ssky-keygen和ssh-copy-id工具,通过4个简单的步骤实现无需输入密码登录远程Linux主机 1 生成密钥 通过内置的工具生成RSA算法加密的密钥 ssh-keygen -t rsa 回车默认选项即可,会在当前用户的home文件下生成密钥文件 2 拷贝密钥…

什么是互联网大厂_仅限今天!大厂最热数据分析经典实战项目大公开!
原标题:仅限今天!大厂最热数据分析经典实战项目大公开!如今,全球早已步入数据时代,随着行业的高速发展,相关岗位缺口已超150万,且薪资超同行业50%。未来十年,数据细分岗位将扩张5倍&…

php教学视频
http://www.52pojie.cn/forum.php?modviewthread&tid283589转载于:https://www.cnblogs.com/dawanxiaobao/p/5703157.html

Go基础编程:作用域
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Go基础编程:作用域11 小弟初学go语言,感觉作用域的运用还是很广泛的,所以就写上一点,也许有的都是很…

数据分析之CE找数据大法
一.基本介绍 CE的全称为Cheat Engine,是一款内存修改编辑工具,其官网是http://www.cheatengine.org,可以在其官网下载到最新的CE工具,目前最新版本是Cheat Engine6.5。CE同时也是一款开源的工具,使用者可以…

a++浏览器_“公司发给我的职业装太小了,我该怎么和领导说?”哈哈哈哈哈|职业装|uc|浏览器...
GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片GIF打开UC浏览器 查看更多精彩图片打开UC浏览器 查看更多精彩图片GIF…

Go基础编程:延迟调用defer
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 本篇文章所讲的就是go编程中的延迟调用defer,希望对社区的成员有较多的帮助。 1 defer作用 关键字defer ⽤于延迟一个函数、方法或者当…

maven工程插件配置
1 <build>2 <!-- 该级工程会加载插件,放在父工程里 -->3 <plugins>4 <!-- 资源文件拷贝插件 -->5 <plugin>6 <groupId>org.apache.maven.plugins</groupId>7 …

卡巴斯基安全浏览器_卡巴斯基 for windows 全方位安全软件2021注册表清除版
软件介绍最近从来不相信木马的Run同学中招了,wup.exe(俗称矿机木马),此款木马真可谓厉害,无敌,用过所有方法都无法清理,百度了所有的道道几乎无用,中了此毒,电脑不会有什么特别异常,…

Android通过ksoap2调用.net(c#)的webservice
转载于:https://www.cnblogs.com/Nagisa-Saku/p/5706183.html

●洛谷P3688 [ZJOI2017]树状数组
题链: https://www.luogu.org/problemnew/show/P3688题解: 二维线段树。 先不看询问时l1的特殊情况。 对于一个询问(l,r),如果要让错误的程序得到正确答案, 显然应该满足l-1位置的值r位置的值(或者说两个位置的异或值…

Activity-生命周期
Activity不是什么陌生的东西,作为Android程序媛对Activity再熟悉不过。每当说起Activity总最关注的还是它的生命周期。 1、一张来自谷歌官方文档的Activity的生命周期图: 直接来个MainActivity覆盖上面所有的方法通过log打印方式给大家展现,通…

arial unicode ms字体_5个检测商用字体和免费字体合集的网站
对于做新媒体和设计的小伙伴来说,最恐慌的就是加班、改稿、脱发、没钱...侵权问题了。一个不注意就是律师函警告。正所谓律师函不是不到,只是晚到。所以,皮皮特意为小伙伴们搜集了这5个远离字体侵权的网站,有检测字体版权的&#…