Swift散记1 字符串和字符

插值字符串中写在括号中的表达式不能包含非转义反斜杠(),并且不能包含回车,不过,插值字符串可以包含其他字面量

Swift的char类型是基于Unicode标量建立的,几乎涵盖了全球的字符,
Oc我记得好像是SCIII什么的...忘了

        var a = "12\\"
        print(a)
        a = "12\0"
        print(a)
        let a2 = Int(a)
        print(a2)
        a = "12"
        let a3 = Int(a)
        print(a3)

// 结果
/*
12\
12�
nil , 因为转义字符\0是空字符,这个a实际上是12+空字符,所以转出来是nil
Optional(12)
*/

如果不想换行,可以传递一个空字符串给terminator参数
如:

        let greeting = "Guten Tag!"
// .indices属性是创造了一个含有这个字符串的所有范围,
// 在swift里面,字符串不能用整数(integer)做索引,如果写了,直接报错
        for index in greeting.characters.indices {
            print("\(greeting[index]) ", terminator: "")
        }
// 结果
// G u t e n   T a g ! 

Swift中String不可以直接用Int类型的下表来取出单个Char
那么

        let num1 = greeting.startIndex.advancedBy(7)
        print("\n\(num1)")
        let a5 = greeting[num1]
        print(a5)

这是可以打印出来的,但是这个num1的类型,不是Int,是Index类型,不知道这是个什么玩意儿..

String 比较
如果两个字符串(或者两个字符)的可扩展的字形群集是标准相等的,那就认为它们是相等的。
例如

        let c = "\u{E9}"
        print(c)
        let d = "\u{65}\u{301}"
        print(d)
// 打印结果都是é,
// 这两个方式都是é的有效表达方式,所以认为两者相等

// 但是,英文的A和俄语中的A意思不同,所以即使打印看着一样,两者也是不等的
let latinCapitalLetterA: Character = "\u{41}" // 英语
let cyrillicCapitalLetterA: Character = "\u{0410}" // 俄语
if latinCapitalLetterA != cyrillicCapitalLetterA {
    print("These two characters are not equivalent")
}
// 打印 "These two characters are not equivalent"

在 Swift 中,字符串和字符并不区分地域(not locale-sensitive)。

String前缀和后缀
hasPrefix(:)/hasSuffix(:)
接收一个String类型的参数,返回一个Bool值

你可能感兴趣的:(Swift散记1 字符串和字符)