Swift 中的Range和NSRange不同

Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间。不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧。

看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串:

?


1

2

3

4

5

6

var str = "Hello, playground"

 

let rangeOfHello = Range(start: str.startIndex,

                         end: advance(str.startIndex, 5))

let helloStr = str.substringWithRange(rangeOfHello)

helloStr //"Hello"

你可以看到,不能通过指定开始结束的Int值来获取Range,需要使用String类的startIndexendIndex属性(String.startIndex的类型不是Int),这就是Swift Ranges特别的地方。

若想获取一个超出startIndex范围的Range,你可以使用上述代码里用到的advance的函数。advance也可以用于从结尾开始计算,所以如果你需要相对于endIndex获取index,像下面的代码一样,使用一个负数即可:

?


1

2

3

4

5

6

let dob = "01/01/2000"

 

let rangeOfYear = Range(start: (advance(dob.endIndex, -4)),

                        end: dob.endIndex)

let yearStr = dob.substringWithRange(rangeOfYear)

yearStr // "2000"

不得不说,细细思量,Swift对于Ranges的使用十分干净和优雅,只要你熟悉了它的用法。

时间: 2024-10-27 09:01:54

Swift 中的Range和NSRange不同的相关文章

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

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

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中的字符串的一些运用

在字符串里插值 var str = "hello" let i = 6 var str2 = "hello \(i)" 累加字符串 var str = "hello" let i = 6 var str+= "hello \(i)" 用函数插入单个值字符 var aaa = "fdasf" aaa.insert("c", atIndex: aaa.startIndex) 用函数插入多个字

swift 中指针的使用UnsafeMutablePointer

在swift中已经弱化了指针的使用,可以这么使用 1 let s: NSRange = NSMakeRange(0, 1) 2 let at = UnsafeMutablePointer<NSRange>.alloc(100) 3 at .memory = s 4 let b = NSMakeRange(33, 33) 5 at.memory = b 6 print(at.memory) 创建一个pointer之后呢,这一通过.memory来进行赋值操作,,pointer本身是一个地址

[Swift] Day01:Swift 中的基本运算符

今天主要看的内容是 Swift 中的基本运算符.记录一下. 空值合并运算符 (Nil Coalescing Operator) a ?? b 中的 ?? 就是是空值合并运算符,会对 a 进行判断,如果不为 nil 则解包,否则就返回 b . 使用的时候有以下两点要求:- a 必须是 optional 的- b 必须和 a 类型一致 也就是说,a 一定要有被备胎的可能,b 一定要有做备胎的资格. 其实也就是对三目运算符的简写: a != nil ? a! : b 或者 a == nil ? b :

总结 Swift 中随机数的使用

在我们开发的过程中,时不时地需要产生一些随机数.这里我们总结一下Swift中常用的一些随机数生成函数.这里我们将在Playground中来做些示例演示. 整型随机数 如果我们想要一个整型的随机数,则可以考虑用arc4random系列函数.我们可以通过man arc4random命令来看一下这个函数的定义: The arc4random() function uses the key stream generator employed by the arc4 cipher, which uses

如何在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 中绝大多数的情况下,推荐使用 String 类型 String 是一个结构体,性能更高 String 目前具有了绝大多数 NSString 的功能 String 支持直接遍历 NSString 是一个 OC 对象,性能略差 Swift 提供了 String 和 NSString 之间的无缝转换 字符串演练 遍历字符串中的字符 for s in str.characters { print(s) } 字符串长度 // 返回以字节为单位的字符串长度,一个中文占 3 个字节 l