截取字符串在Swift中相比OC要复杂很多,主要原因可能还是OC的NSRange的创建方法中参数类型为int,而Swift却对类型要求很严格,int不能作为参数创建Range,这要使用String中的startIndex和endIndex,但问题又出来了,如果要有灵活的范围呢?在之前可以直接就用advance函数,现在的Swift没有这个函数了,要用到advancedBy和distanceTo。

以下代码是对于Range和advancedBy函数的使用:

        //截取子串
let str = "Hello,Swift"
let startIndex = str.startIndex
//方法一:使用advancedBy + stringByReplacingCharactersInRange
let endIndexA = startIndex.advancedBy(str.characters.count-)
let rangeOfHelloA = Range(start: startIndex, end: endIndexA)
let newStr = str.stringByReplacingCharactersInRange(rangeOfHelloA, withString: "")
print("newStr1 = " + newStr) //方法二:advancedBy + subStringWithRange
let newStr2 = str.substringWithRange(rangeOfHelloA)
print("newStr2 = " + newStr2) //方法三:使用NSString类型;Swift也提供了NSString和S挺
let str_OC = str as NSString
let newStr3 = str_OC.substringWithRange(NSRange(location: , length: )) as String
//或者
// let newStr3 = str_OC.substringWithRange(NSMakeRange(0, 5)) as String
print("newStr3 = " + newStr3) //插入字符
var originStr = ""
originStr.insert("", atIndex: originStr.startIndex.advancedBy())
print("newstr4 = " + originStr)
//插入字符串->字符串需要转成字符集才能进行操作
originStr.insertContentsOf("字符串".characters, at: originStr.startIndex.advancedBy())
print("newStr5 = " + originStr) //移除其中的某个字符
var originStr2 = ""
originStr2.removeAtIndex(originStr2.startIndex)
print("newStr6 = " + originStr2)
//移除子串 注意:endIndex是从整个字符的后一位开始的,直接使用originStr2.endIndex会导致越界;
let removeRange = originStr2.startIndex.advancedBy()...originStr2.endIndex.advancedBy(-)
originStr2.removeRange(removeRange)
print("newStr7 = " + originStr2)

运行结果:

工作随笔——Swift中的Range和一些字符操作的更多相关文章

  1. Swift 中的Range和NSRange不同

    Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间.不过,现在回过头来看看,发现Sw ...

  2. swift中Range的使用书名

    在swift中Range有两种用法 1.把字符串转换成NSString来使用 //这里是把swift的字符换转换成了nsstring 使用 let str :NSString = text.strin ...

  3. Swift中类似C++和ruby中的final机制

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在C++和ruby语言的错误处理中有一种final机制 ...

  4. 关于Swift中的指针的那些事

    前言 在Objective-c的世界中,一切对象都是指针.它是一种运行时语言,具体指针的对象类型将会在运行时,由系统分配.这样虽然自由,但是却并不安全. Swift世界就不一样了,Swift的世界很安 ...

  5. 工作随笔——UIButton的EdgeInsets + Swift中的正则表达式;

    1.UIButton的EdgeInsets UIButton的EdgeInsets方法,是用来设置title和image对于上左下右四个方向的偏移,但是很奇怪的是,刚开始只有Image,titile也 ...

  6. Swift 中范围和区间如何使用?

    虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对swift语言存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧. Range ...

  7. Swift 中枚举

    Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [AP ...

  8. 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

    项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...

  9. [翻译]理解Swift中的Optional

    原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...

随机推荐

  1. [题解]USACO 1.3 Wormholes

    Wormholes Farmer John's hobby of conducting high-energy physics experiments on weekends has backfire ...

  2. 使用HttpClient 4.3.4 自动登录并抓取中国联通用户基本信息和账单数据,GET/POST/Cookie

    一.什么是HttpClient? HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 ...

  3. 分析‖为什么越来越多厂商开始发力VR一体机?

    2015年下半年,国内VR头显市场的主旋律还是PC头显和手机盒子.到了2016年上半年,一体机逐渐上位,成为发布会上的主角. 近期IDEALENS启视在北京召开发布会,发布会的主角K2和K2Pro正是 ...

  4. 深入理解display属性

    display 属性在网页布局中很常见,但是之前一直不了解他的各个属性的区别,只是简单的使用block.none属性,对于其他属性都不清楚,今天详细的学习和实践display属性的各个方面 定义 di ...

  5. 使用WebDriver遇到的那些坑

    在做web项目的自动化端到端测试时主要使用的是Selenium WebDriver来驱动浏览器.Selenium WebDriver的优点是支持的语言多,支持的浏览器多.主流的浏览器Chrome.Fi ...

  6. win7+vs2010+opencv2.4.6配置

    记录一下配置,省的以后还到处去找: (一) 添加环境变量://第一次使用opencv的话需要加环境变量:” %opencv%\build\x86\vc10\bin”和”%opencv%\build\c ...

  7. 常用邮件服务器名(POP3,SMTP地址)

    POP3服务器地址:pop3.sina.com.cn(端口:110)SMTP服务器地址:smtp.sina.com.cn(端口:25) sina.cn: POP3服务器地址:pop3.sina.com ...

  8. Windows netstat 查看端口、进程占用

    目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. (1)查看该端口被那个PID所占用;方法一:有针对性的查看端口,在命令行下,使用命令netstat –an ...

  9. Ajax Step By Step2

    第二.[$.get()和$.post()方法] .load()方法是局部方法(有需要父$),因为他需要一个包含元素的 jQuery 对象作为前缀.而$.get()和 $.post()是全局方法,无须指 ...

  10. 【转】MySQL的各种timeout

    因为最近遇到一些超时的问题,正好就把所有的timeout参数都理一遍,首先数据库里查一下看有哪些超时: root@localhost : test 12:55:50> show global v ...