工作随笔——Swift中的Range和一些字符操作

截取字符串在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-1)
        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: 0, length: 5)) as String
        //或者
//        let newStr3 = str_OC.substringWithRange(NSMakeRange(0, 5)) as String
        print("newStr3 = " + newStr3)

        //插入字符
        var originStr = "0000"
        originStr.insert("5", atIndex: originStr.startIndex.advancedBy(2))
        print("newstr4 = " + originStr)
        //插入字符串->字符串需要转成字符集才能进行操作
        originStr.insertContentsOf("字符串".characters, at: originStr.startIndex.advancedBy(2))
        print("newStr5 = " + originStr)

        //移除其中的某个字符
        var originStr2 = "12345"
        originStr2.removeAtIndex(originStr2.startIndex)
        print("newStr6 = " + originStr2)
        //移除子串  注意:endIndex是从整个字符的后一位开始的,直接使用originStr2.endIndex会导致越界;
        let removeRange = originStr2.startIndex.advancedBy(1)...originStr2.endIndex.advancedBy(-2)
        originStr2.removeRange(removeRange)
        print("newStr7 = " + originStr2)

运行结果:

时间: 2024-10-11 21:55:34

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

Swift 中的Range和NSRange不同

Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间.不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧. 看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串: ? 1 2 3 4 5 6 var str = "Hello, playground"   let ran

swift中Range的使用书名

在swift中Range有两种用法 1.把字符串转换成NSString来使用 //这里是把swift的字符换转换成了nsstring 使用 let str :NSString = text.string as NSString self.showMessage("tap :" + str.substringWithRange(range)) 2 .使用swift自身的Range创建 //这里使用swift自带的range来做, //在此说明下,,swift中的Range不同于oc中,可

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在C++和ruby语言的错误处理中有一种final机制,发生在无论是否出现错误都会执行的情况.这时适合处理收尾或清理工作. 在Swift中同样存在一个defer语法,后面跟闭包可以完成类似的功能,只不过defer不仅仅可以用在错误处理中,它可以用在任何需要清理的情况: var isTrue = false func test(name:String)-

如何在Swift中创建自定义控件

更新通知:这篇引导教程由Mikael Konutgan使用iOS 8和Swift语言重新制作,在Xcode6和7上测试通过.原始教程是由Colin Eberhardt团队制作的. 用户界面控件是许多应用的重要组成部分.使用这些控件,可以让用户查看应用的内容或与他们的应用进行交互.苹果提供了一个控件集,像UITextField, UIButton 和 UISwitch.灵活使用这些工具箱中已经存在的控件,可以让你创建各种各样的用户界面. 但是,有的时候你可能需要做一些与众不同的事情:库中的控件已经

Swift 中枚举

Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [APPVENTURE]categories: [Swift 进阶]permalink: advanced-practical-enum-examples 原文链接=http://appventure.me/2015/10/17/advanced-practical-enum-examples/作者=Benedik

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

虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对swift语言存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧. Ranges 在swift语言中,范围是用 Range 类型表达的,一个范围就是一个索引集合. 其中,值得注意的是Range在标准库中使用很频繁,特别是处在集合的上下文当中时.当我们查看 Range 定义时,范围和集合之间的紧密关系一目了然: struct Range<Element : ForwardInd

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr

Swift Explore - 关于 Swift 中的 isEqual 的一点探索

在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等.比如两个字符串是否相等.而所谓的 相等 有着两层含义.一个是值相等,还有一个是引用相等.如果熟悉 Objective-C 开发的话,就会知道 Objective-C 为我们提供了一系列 isEqual: 方法来判断值相等,而 == 等于号用来判断引用相等. 我们来看一个 Objective-C 的例子就会更加明白了: NSArray *arr1 = @[@"cat",@"hat",@&qu

浅谈swift中的那些类,结构以及初始化的操作

首先呢,我们先声明一个类 class Parent { //声明一个属性 var p1: String = "abc" //声明一个方法 func m() { print("parent m") } //声明一个静态的方法 final func n(){ } } 然后我们new一个Parent类(注意了,在swift中是没有new的,如果想new 一个的话, 直接调用该类就可以了) var par = Parent() 调用parent的方法和属性 par.m()