字符串和字符String and Characters
2015-08-21 16:33
190 查看
Swift的String和Character类型提供了一个快速的兼容Unicode的方式来处理代码中的文本信息
String类型与Foundation框架中的NSString类型进行了无缝桥接,所有的NSString API都可以为String类型服务
字符串字面量可以包含以下特殊字符:
1、转义字符 \0(空字符)、\(反斜杠)、\t(水平制表符)、\n(换行符)、\r(回车符)、\”(双引号)、\’(单引号)
2、Unicode标量 \u{n}:n为任意1-5位十六进制数
字符串可变性、连接字符串
字符数量:count(str)
在Swift中我们是使用String还是NSString?
引用喵神的解释:
首先虽然 String 和 NSString 有着良好的互相转换的特性,但是现在 Cocoa 所有的 API 都接受和返回 String
类型。我们没有必要也不必给自己凭空添加麻烦去把框架中返回的字符串做一遍转换,既然 Cocoa 鼓励使用
String,并且为我们提供了足够的操作 String 的方法,那为什么不直接使用呢?
其次,因为在 Swift 中 String 是 struct,相比起 NSObject 的 NSString 类来说,更切合字符串的
“不变” 这一特性。通过配合常量赋值 (let)
,这种不变性在多线程编程时就非常重要了,它从原理上将程序员从内存访问和操作顺序的担忧中解放出来。另外,在不触及 NSString
特有操作和动态特性的时候,使用 String 的方法,在性能上也会有所提升。
最后,因为 String 实现了像 CollectionType 这样的接口,因此有些 Swift 的语法特性只有String 才能使用,而
NSString 是没有的。一个典型就是 for…in 的枚举,我们可以写
:
如果转换为NSString类型则会编译失败
自己解释:Swift的String类型是值类型,(结构体和枚举也是值类型,值类型的特点是当值类型被赋予给一个变量、常数或者传递给一个函数的时候,实际上操作的都是该值的拷贝)String是一个结构体类型,和Objective-C中的NSString不一样,所以当你声明一个String类型的值是,该值不是一个指针,在使用上更加安全
例外情况:
由于String和NSString采用编码方式不同,所以导致一些特殊的方法只能在NSString中使用(length,subStringWithRange())而没有Swift的版本
NSString采用UTF-16表示十六位代码单元数字,而不是基于Unicode字符
引用:《The Swift Programming Language》 ,王巍大神的《100个Swift必备tips》
如有问题欢迎指正,谢谢
String类型与Foundation框架中的NSString类型进行了无缝桥接,所有的NSString API都可以为String类型服务
字符串字面量可以包含以下特殊字符:
1、转义字符 \0(空字符)、\(反斜杠)、\t(水平制表符)、\n(换行符)、\r(回车符)、\”(双引号)、\’(单引号)
2、Unicode标量 \u{n}:n为任意1-5位十六进制数
字符串可变性、连接字符串
let str = "aa" + "\u{1f436}” str += “bb"
字符数量:count(str)
在Swift中我们是使用String还是NSString?
引用喵神的解释:
首先虽然 String 和 NSString 有着良好的互相转换的特性,但是现在 Cocoa 所有的 API 都接受和返回 String
类型。我们没有必要也不必给自己凭空添加麻烦去把框架中返回的字符串做一遍转换,既然 Cocoa 鼓励使用
String,并且为我们提供了足够的操作 String 的方法,那为什么不直接使用呢?
其次,因为在 Swift 中 String 是 struct,相比起 NSObject 的 NSString 类来说,更切合字符串的
“不变” 这一特性。通过配合常量赋值 (let)
,这种不变性在多线程编程时就非常重要了,它从原理上将程序员从内存访问和操作顺序的担忧中解放出来。另外,在不触及 NSString
特有操作和动态特性的时候,使用 String 的方法,在性能上也会有所提升。
最后,因为 String 实现了像 CollectionType 这样的接口,因此有些 Swift 的语法特性只有String 才能使用,而
NSString 是没有的。一个典型就是 for…in 的枚举,我们可以写
:
let levels = "ABCDE" for i in levels { print(i) }
如果转换为NSString类型则会编译失败
自己解释:Swift的String类型是值类型,(结构体和枚举也是值类型,值类型的特点是当值类型被赋予给一个变量、常数或者传递给一个函数的时候,实际上操作的都是该值的拷贝)String是一个结构体类型,和Objective-C中的NSString不一样,所以当你声明一个String类型的值是,该值不是一个指针,在使用上更加安全
例外情况:
由于String和NSString采用编码方式不同,所以导致一些特殊的方法只能在NSString中使用(length,subStringWithRange())而没有Swift的版本
NSString采用UTF-16表示十六位代码单元数字,而不是基于Unicode字符
引用:《The Swift Programming Language》 ,王巍大神的《100个Swift必备tips》
如有问题欢迎指正,谢谢
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 数据库链接字符串查询网站
- android上改变listView的选中颜色
- String.intern
- Apple Swift学习教程
- Prototype源码浅析 String部分(二)
- Flex字符串比较 还有Flex字符串操作
- Ruby中的String对象学习笔记
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- 将字符串转换成System.Drawing.Color类型的方法
- Lua源码中字符串类型的实现
- Lua性能优化技巧(四):关于字符串
- 字符串聚合函数(去除重复值)
- Ruby中的字符串编写示例
- 总结的5个C#字符串操作方法分享