发现有些教程比较老了,跟不上时代了,导致代码无法运行。最新的swift是2.0版本,从这章与时俱进开始学习2.0。Xcode需要更新到V7.0,OS X需要更新到V10.10.4以上。
l 字符串字面量
字符串字面量是由双引号包裹着的具有固定顺序的文本字符集。
let someString = “Some string value”
var someString = “Some value”
Ø 字符串字面量可以包含以下特殊字符
n 转移特殊字符 \0 (空字符)、\\(反斜线)、\t (水平制表符)、\n (换行符)、\r (回车符)、\" (双引号)、\' (单引号)。
n Unicode标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。
Let wiseWords = “\”我要成为海贼王的男人\”-路飞”
let dollarSign = "\u{24}"// $, Unicode标量 U+0024
let blackHeart = "\u{2665}"// ♥, Unicode标量 U+2665
let sparklingHeart = "\u{1F496}"// Unicode 标量 U+1F496
初始化空字符串
var emptyString = “”//空字符串字面量
varanotherEmptyString = String()//初始化String实例
//两个字符串均为空并等价
检查字符串是否为空
ifemptyString.isEmpty
{
Print(“字符串为空”)
}
注:Swift2.0 print()函数取代了之前版本的println()函数
l 字符串是值类型
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值,其明确了无论该值来自于哪里,都是您独自拥有的。您可以放心您传递的字符串本身不会被更改。
l 字符(Characters)
Swift 的 String 类型表示特定序列的字符值的集合。每一个字符值代表一个 Unicode 字符。您可利用 for-in 循环来遍历字符串中中的characters属性来获取每一个字符的值:
for character in"Dog!".characters {
println(character)
}
// D
// o
// g
// !
Ø 声明单字符常量或变量
let sign:Character =“s”
var signAnother:Character= “t”
字符串可以通过传递一个值类型为Character的数组作为自变量来初始化:
let catCharacters: [Character] = ["C", "a", "t", "!"]
let catString = String(catCharacters)
print(catString) // 打印输出:"Cat!"
l 连接字符串
用“+”,“+=”,使用append()方法将一个字符加到字符串变量的尾部
var welcome = “welcome”
let ex:Character = “!”
welcome.append(ex);
println(“welcome:\(welcome)”)
//输出:welcome:welcome!
注意:
您不能将一个字符串或者字符添加到一个已经存在的字符变量上,因为字符变量只能包含一个字符。
l 字符串插值 (String Interpolation)
写法:反斜线+(常量、变量、字面量和表达式)
let exp = 2
println(“\(exp)”)
//输出:2
l Unicode
Unicode 是一个国际标准,用于文本的编码和表示。 它使您可以用标准格式表示来自任意语言几乎所有的字符,并能够对文本文件或网页这样的外部资源中的字符进行读写操作。 Swift 的String和Character类型是完全兼容 Unicode 标准的。
l 可扩展字符群集
每一个 Swift的Character类型代表一个可扩展的字形群。 一个可扩展的字形群是一个或多个可生成人类可读的字符 Unicode 标量的有序排列。
let eacute:Character= “u{E9}”
letcombinedEacute:Character = “u{65}\u{301}”
print(eacute,combinedEacute,eacute == combinedEacute)
//输出:é,é, true
l 计算字符数量 (Counting Characters)
使用字符串的characters属性的count属性获得
var word = “cafe”
println(“word hascharacters:\(word.characters.count)”)
//输出:4
在 Swift 中,使用可拓展的字符群集作为Character值来连接或改变字符串时,并不一定会更改字符串的字符数量。
word += “u{301}”
print(word,word.characters.count)
//输出:café,4
l 字符串索引 (String Indices)
Ø 特点
1) 每一个String值都有一个关联的索引(index)类型,String.Index来对应字符串中每一个字符的位置
2) Swift 的字符串不能用整数(integer)做索引
3) 用属性startIndex获取第一个字符的索引,endIndex获取最后一个字符的后一个位置的索引,所以endIndex不是有效下标。如果字符串为空,则startIndex和endIndex相等。
4) 通过调用String.Index的predecessor()方法,可以立即得到前面一个索引,调用successor()方法可以立即得到后面一个索引。任何一个String的索引都可以通过锁链作用的这些方法来获取另一个索引,也可以调用advancedBy(_:)方法来获取。但如果尝试获取出界的字符串索引,就会抛出一个运行时错误。
Ø 例子
let greeting = “Guten Tag!”
var g = greeting[greeting.startIndex]
print(g) //G greeting.startIndex的类型为Index
g = greeting[greeting.endIndex.predecessor()]
print(g)// !
g = greeting[greeting.startIndex.successor()]
print(g)// u
let index = greeting.startIndex.advancedBy(7)
print(index,greeting[index]) //7 a
Ø 使用characters属性的indices属性会创建一个包含全部索引的范围(Range),用来在一个字符串中访问单个字符。
for index in greeting.characters.indices{
print("\(greeting[index]) ",terminator: "")
}
//输出"G u t e n T a g !" (greeting[index])后面有个空格,不然打印不出来
l 插入与删除
字符串的指定索引插入一个字符: insert(newElement:Character,atIndex:Index)
var welcome = "hello"
welcome.insert("!",atIndex: welcome.endIndex)
字符串的指定索引插入一个字符串: insertContentOf(newElements:S,at:Index)
welcome.insertContentsOf("there".characters,at:welcome.endIndex.predecessor)) // welcome 现在等于 "hello there!"
字符串的指定索引删除一个字符:removeAtIndex(i:Index)
welcome.removeAtIndex(welcome.endIndex.predecessor())
print(welcome) // hello theres
字符串的指定索引删除一个子字符串:removeRange(subRange:Range<Index>)
参数需要传入一个类型为Index的索引范围
let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex
welcome.removeRange(range)
print(welcome) //hello
l 比较字符串 (Comparing Strings)
三种比较方式:字符串相等,前缀相等,后缀相等
1) 字符串/字符相等
使用"=="和"!="比较,如果两个字符串(或者两个字符)的可扩展的字形群集是标准相等的,那就认为它们是相等的。
let quotation = "We're a lotalike, you and I."
let sameQuotation = "We're a lotalike, you and I."
if quotation == sameQuotation
{
print("These two strings are considered equal")
}
2) 前缀相等
方法:hasPrefix(prefix:String):Bool
var str = “helloswift”
print(str.hasPrefix(“hello”))
//输出:true
3) 后缀相等
方法:hasSuffix(suffix:String):Bool
var str = “helloswift”
print(str.hasSuffix (“swift”))
//输出:true
l 字符串的 Unicode 表示形式
三种 Unicode 兼容的方式访问字符串的值:
1) UTF-8 代码单元集合 (利用字符串的utf8属性进行访问)
var dogStr = “dog!!”
for codeUnit in dogStr.utf8 {
print("\(codeUnit) ", terminator: "")
}
//68111 103 226 128 188
2) UTF-16 代码单元集合 (利用字符串的utf16属性进行访问)
for codeUnit in dogStr.utf16 {
print("\(codeUnit) ", terminator: "")
}
// 68111 103 8252
3) 21位的Unicode 标量值集合,也就是字符串的 UTF-32 编码格式 (利用字符串的unicodeScalars属性进行访问)
for scalar in dogString.unicodeScalars {
print("\(scalar) ")
}
// D
// o
// g
// ‼