swift笔记 (三) —— 字符和字符串
来源:互联网 发布:汽修软件 编辑:程序博客网 时间:2024/06/05 01:15
字符串和字符
苹果要是不提供了unicode的字符串和字符,那就是他们公司所有人的脑袋都被门夹过
他自己家都要发很多国家的版本的软件,怎么可能不用unicode呢
此处略去30字...
这里可以拿出来说的,也就是 Swift的 String支持所有的NSString的api
String中可以包含一些特殊字符:
\0 (空字符) \\ (反斜线) \t (tab) \n (换行符) \r (回车符) \” (双引号) \’ (单引号)
还可以包含:
单字节 unicode 字符 \xnn // \x后面跟着两个十六进制数
双字节 unicode 字符 \unnnn // \u后面跟着四个十六进制数
四字节 unicode 字符 \Unnnnnnnn // \U(这个是大写)后面跟着八个十六进制数
官方的例子:
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\x24" // $, Unicode scalar U+0024
let blackHeart = "\u2665" // ♥, Unicode scalar U+2665
let sparklingHeart = "\U0001F496" //这个注释在blog上显示不了,以至于后面的都被截断了。。。
空字符串
var emptyString = “”
var anotherEmptyString = String()
if emptyString.isEmpty {…} //isEmpty 方法可用,返回Bool值
至于
var myString = “hello”
myString += “ world”
let myString = “hello”
myString += “ world”
就不需要反复的提了吧,第二种let 不可行,因为他是常量
字符串作为参数的传递
值得注意的是,字符串是传值的,而在Objective-C中,是传引用的
虽然官方说在编译选项里可以把这个优化掉,只有在需要改变字符串内容的时候才会传值,从而获得很高效的传参
(算了,后面看看还有没有什么可以规避这个问题的方法吧,尽量少传字符串为妙,除非不得已)
字符
for character in “Hello World” {
pintln (character)
}
let myChar: Character = “$”
不解释了
字符个数
Swift提供了一个全局函数 countElements 可以用于干这事儿:
let myLongString = “Hello Kitty~ Hello World~ I Love Shanghai~ I Love China~ “
println(“myLongString has \(countElement(myLongString) characters”) //57个...
值得注意的是:
countElement() 是把字符一个一个数过去的,所以处理长字符串的时候,需要我们关心效率问题
这与NSString不同,NSString是按着UTF-16存储字符串的,也是按着UTF-16去算字符数的
而Swift存的是unicode,它并不能像UTF-16那样数,因为它也不知道每个字符占了多大空间
所以,countElement() 和 NSString 返回的字符数,有可能是不同的
当然,如果把Swift的String 传给了NSString的函数的话,这里就要注意了,是要按着NSString的方式数
也就是utf16count,而不是countElement()的返回数量
字符串包含
hasPrefix 和 hasSuffix 两个String的方法都是遍例字符串的:
let myString1 = “中华人民共和国”
let myString2 = “我是中国人”
myString1.hasPrefix(“我”) // false
myString2.hasPrefix(“我”) // true
myString1.hasSuffix(“人民”) // true
myString2.hasSuffix(“人民”) // false
字符串大小写转换
uppercaseString 和 lowercaseString
let myString = “Hellow World”
println(myString.uppercaseString) //HELLOW WORLD
println(myString.lowercaseString) //hellow world
字符编码
Swift的字符串是unicode的, unicode可以表示世界上任何一种语言的任何字符
需要转换的时候,也可以使用String提供的方法
let myString = “abc”
myString.utf8 //UTF-8 编码
myString.uft16 //UTF-16 编码
myString.unicodeScalars //21位 unicode
关于编码的知识,我就不写在这里了,需要了解的话
请参考《The Swift Programming Language》第92-96页 (发现这个页码在不同设备上不一样,我是在iMac上看的)
0 0
- swift笔记 (三) —— 字符和字符串
- 【Swift】学习笔记(三)——字符和字符串
- Swift 笔记三 : swift字符串与字符
- Swift学习笔记(三)之字符串和字符
- 字符和字符串—Swift学习笔记(六)
- Swift 字符串和字符(笔记)
- swift基础教程——字符和字符串
- Swift学习笔记系列——(2)字符串和字符
- The Swift Programming Language学习笔记(四)——字符串和字符
- Swift学习笔记(5)——字符串和字符(一)
- Swift学习笔记(6)——字符串和字符(二)
- Swift--字符串和字符
- Swift--字符串和字符
- Swift字符串和字符
- Swift-字符串和字符
- Swift - 字符和字符串
- Swift字符和字符串
- Swift-字符串和字符
- Android一些学习资源
- ubuntu 14.04使用xrdp实现windows 远程桌面连接
- swift笔记(二) —— 运算符
- CWnd指针和HWnd
- IOS工程依赖解耦之静态链接库
- swift笔记 (三) —— 字符和字符串
- iis如何下载包含中文文件名的rar文件
- 《算法设计与分析》考试说明(复习总结 与 试题提交方式、个人考勤记录——2014.05.10更新)
- Linux Shell脚本查看Java线程的CPU使用情况
- Python多线程下载文件实例代码
- C++输出wchar_t和wstring
- support vector machine -note from wiki
- coherent 和NoCoherent的正交IQ频率间隔
- u-boot学习(五):u-boot启动内核