美文网首页
Swift3.1_字符串

Swift3.1_字符串

作者: Carson_Zhu | 来源:发表于2018-02-20 18:49 被阅读12次

    字符串字面量

    您可以在您的代码中包含一段预定义的字符串值作为字符串字面量。字符串字面量是由双引号""包裹着的具有固定顺序的文本字符集。 字符串字面量可以用于为常量和变量提供初始值:

    let someString = "Some string literal value"
    

    someString常量通过字符串字面量进行初始化,Swift会推断该常量为String类型。

    初始化空字符串

    要创建一个空字符串作为初始值,可以将空的字符串字面量赋值给变量,也可以初始化一个新的String实例:

    var emptyString = ""               // 空字符串字面量
    var anotherEmptyString = String()  // 初始化方法
    

    判断该字符串是否为空:

    print(emptyString.isEmpty)    // true
    

    字符串可变性

    您可以通过将一个特定字符串分配给一个变量来对其进行修改,或者分配给一个常量来保证其不会被修改

    var variableString = "hello"
    variableString += " world"
    // variableString 现在为 "hello world"
    
    let constantString = "hello"
    constantString += " world"
    // 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。
    

    字符串是值类型

    String的定义就是一个结构体,结构体是值类型。在Swift中struct和class的区别中进行了详细描述。

    public struct String {
      ...
    }
    

    如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数、方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。

    var str1 = "hello"
    var str2 = str1
    str2 = "hello world"
    print("str1: "+str1+"  str2: "+str2)
    // str1: hello  str2: hello world
    

    字符

    Swift中用characters表示字符。

    for character in "Dog".characters {
        print(character)
    }
    // D
    // o
    // g
    

    字符串可以通过传递一个值类型为Character的数组作为自变量来初始化:

    let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
    let catString = String(catCharacters)    // "Cat!🐱"
    

    还可以判断字符串是否包含字符:

    catString.contains("a")    // true
    

    获取字符个数:

    catString.characters.count    // 5
    

    连接字符串和字符

    通过加法运算符+连接在一起创建一个新的字符串:

    let string1 = "hello"
    let string2 = " world"
    let welcome = string1 + string2    // welcome 现在等于 "hello world"
    

    通过加法赋值运算符+=将一个字符串添加到一个已经存在字符串变量上:

    var string = "hello"
    string += " world"    // string 现在等于 "hello world"
    

    append()方法将一个字符附加到一个字符串变量的尾部:

    var string = "hello world"
    let ch: Character = "!"
    string.append(ch)    // string 现在等于 "hello world!"
    string.append("...") // string 现在等于 "hello world!..."
    

    字符串插值

    字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:

    let multiplier = 3
    let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
    // message 是 "3 times 2.5 is 7.5"
    

    注意:
    插值字符串中写在括号中的表达式不能包含非转义反斜杠\,并且不能包含回车或换行符。不过,插值字符串可以包含其他字面量。

    Unicode

    Unicode是一个国际标准,用于文本的编码和表示。 它使您可以用标准格式表示来自任意语言几乎所有的字符,并能够对文本文件或网页这样的外部资源中的字符进行读写操作。SwiftStringCharacter类型是完全兼容Unicode标准的。

    Unicode 标量

    SwiftString类型是基于Unicode标量建立的。Unicode标量是对应字符或者修饰符的唯一的21位数字,注意不是所有的21Unicode标量都代表一个字符,因为有一些标量是留作未来分配的。

    字符串字面量的特殊字符

    字符串字面量可以包含以下特殊字符:

    • 转义字符
      空字符\0、反斜线\\、水平制表符\t、换行符\n、回车符\r、双引号\"、单引号\'
    • Unicode标量
      写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的Unicode位码。
    let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
    // "Imageination is more important than knowledge" - Enistein
    let dollarSign = "\u{24}"             // $, Unicode 标量 U+0024
    let blackHeart = "\u{2665}"           // ♥, Unicode 标量 U+2665
    let sparklingHeart = "\u{1F496}"      // 💖, Unicode 标量 U+1F496
    

    访问字符串

    每一个String值都有一个关联的索引index类型,String.Index它对应着字符串中的每一个Character的位置。

    • 第一个索引
      let string = "hello world"
      let start = string.startIndex    // String.Index 类型
      string[start]                    // 结果 h
      
    • 最后一个索引
      使用endIndex属性可以获取最后一个Character的后一个位置的索引。因此,endIndex属性不能作为一个字符串的有效下标。
      string[string.endIndex]       // 越界错误 
      string.index(after: endIndex) // 越界错误 
      
    • 索引
      通过上一个索引和下一个索引获取对应索引:
      string[string.index(after: string.startIndex)] // 第二个 e
      string[string.index(before: string.endIndex)]  // 最后一个字符 d
      
      通过偏移量获取对应的索引:
      let index = string.index(string.startIndex, offsetBy: 4)
      string[index]    // o
      
    • 根据字符获取索引
      let index = string.index(of: "w")
      

    修改字符串

    插入
    var welcome = "hello"
    
    welcome.insert("!", at: welcome.endIndex)
    // welcome 变量现在等于 "hello!"
    
    welcome.insert(contentsOf:" world".characters, at: welcome.index(before: welcome.endIndex))
    // welcome 变量现在等于 "hello world!"
    
    删除
    welcome.remove(at: welcome.index(before: welcome.endIndex))
    // welcome 现在等于 "hello world"
    
    let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
    welcome.removeSubrange(range)
    // welcome 现在等于 "hello"
    
    替换
    var welcome = "hello world"
    let range = welcome.index(welcome.startIndex, offsetBy: 6)..< welcome.endIndex
    welcome.replaceSubrange(range, with: "Swift")
    // welcome 现在等于 "hello Swift"
    

    前缀、后缀相等

    let string = "hello world"
    string.hasPrefix("a")    // false
    string.hasSuffix("d")    // true
    

    大小写切换

    string.lowercased()
    string.uppercased()
    

    字符串转数组

    let string = "a,b,c,d"
    string.components(separatedBy: ",")    // ["a", "b", "c", "d"]
    

    相关文章

      网友评论

          本文标题:Swift3.1_字符串

          本文链接:https://www.haomeiwen.com/subject/gfvgtftx.html