美文网首页
Swift中的 String字符串

Swift中的 String字符串

作者: 孤雁_南飞 | 来源:发表于2021-01-09 19:08 被阅读0次

    String字符串的创建和初始化

    • 初始化空字符串
    1. 字面量
    2. 初始化器语法
    3. isEmpty 检查是否为空字符串
    let emptyString = ""
    let anotherEmptyString = String()
    
    if emptyString.isEmpty {
        print("Nothing to see here")
    }
    
    • 字面量
    1. 字符串字面量是被双引号("")包裹的固定顺序文本字符
    2. Swift 会为 str 常量推断类型为String
    let str = "some string"
    
    • 多行字面量
    1. 多行字符串字面量是用三个双引号引起来的一系列字符
    2. 多行字符串字面量把所有行包括在引号内,开始和结束默认不会有换行符
    3. 当你代码中在多行字符串字面量里包含了换行,那个换行符同样会成为字符串里的值,如果你想要使用换行符来让你的代码易读,却不想让换行符成为字符串的值,那就在哪些行的末尾使用反斜杠()
    let softWrappedQuotation = """
    1. 多行字符串字面量是用三个双引号引起来的一系列字符
    2. 多行字符串字面量把所有行包括在引号内,开始和结束默认\
    不会有换行符
    3. 当你代码中在多行字符串字面量里包含了换行,那个换行符同样会成为字符串里的值,如果你想要使用换行符来让你的代码易读,却不想让换行符成为字符串的值,那就在哪些行的末尾使用反斜杠(\\)
    """ 
    print(softWrappedQuotation)
    
    1. 要让多行字符串字面量起始或结束于换行,就在第一或最后一行写一个空行
    2. 多行字符串可以缩进以匹配周围的代码,双引号(""")前的空格会告诉 Swift 其他行钱应该有多少空白是需要忽略的
    3. 如果你在某行的空格超过了结束的双引号("""),那么这些空格会被包含
    let softWrappedQuotation = """
        1. 多行字符串字面量是用三个双引号引起来的一系列字符
            2. 多行字符串字面量把所有行包括在引号内,开始和结束默认\
    不会有换行符
        3. 当你代码中在多行字符串字面量里包含了换行
    """
    print(softWrappedQuotation)
    
    • 字符串里的特殊字符
    1. 转移特殊字符\0(空字符串), \(反斜杠), \t(水平制表符), \n(换行符), \r(回车符), "(双引号), '(单引号)
    2. 任意的Unicode标量,写作\u{n},里面的n是一个1-8位的16禁止数字,起始是合法Unicode值
    3. 可以在多行字符串字面量中包含双引号(“)二不需要转移,要在多行字符串包含文本“”,转移至少一个双引号
    let str = "hello\t \"Swift"
    let dollarSign = "\u{24}"
    let blackHeart = "\u{2665}"
    let sparkingHeart = "\u{1F496}"
    
    • 扩展字符串分隔符(Raw String)
    1. 在字符串字面量中放置扩展分隔符,来在字符串中包含特殊字符而不让他们真的生效
    2. 把字符串放在双引号(")内并由井号(#)包裹
    3. 如果字符串里有"#则首尾需要两个##
    4. 如果你需要字符串中某个特殊符号的效果,使用匹配你包裹的#号数量的#号,并在签名写转义符号\
    let str = #"Line 1\nLine 2"#
    let str1 = #"Line 1\#nLine 2"#
    let str2 = ###"Line 1\###nLine 2"###
    print(str)
    print(str1)
    print(str2)
    

    String字符串的常见操作

    • 字符串的可变性
    1. var 指定的可以修改
    2. let 指定的不可以修改
    let welcome = "hello"
    var welcome1 = "hello"
    welcome1 += " world"
    print(welcome)
    print(welcome1)
    
    • 字符串是值类型
    1. String 值在传递给方法或者函数的时候会被复制过去
    2. 赋值给常量或者变量的时候也是一样
    3. Swift编译器优化了字符串使用的资源,实际上拷贝只会在确实需要的时候才进行
    var welcome = "hello"
    var welcome1 = welcome
    print(welcome == welcome1)
    welcome1.append(",") //Swift里面的String是值类型, welcome1改变并不会影响welcome
    print(welcome)
    print(welcome1)
    print(welcome == welcome1)
    
    • 操作字符
    1. for-in 循环遍历String中的每一个独立的Character
    2. Character 类型
    3. String 值可以通过传入 Character来进行构造
    for c in welcome {
        print(c)
    }
    
    • 字符串拼接
    1. 使用加运算符(+)创建新字符串
    2. 使用加赋值符号(+=)在已经存在的 String 值末尾追加一个 String 值
    3. 使用 String 类型的 append() 方法来可以给一个 String 变量的末尾追加 Character 值
    • 字符串插值
    1. 字符串插值是一种从混合常量、变量、字面量和表达式的字符串字面量,构造新String值的方法
    2. 每一个你插入到字符串字面量的元素都要背一堆圆括号包裹,然后使用反斜杠前缀
    3. 类似于NSString 的 stringWithFormat方法,但是更加简便、更强大
    let multiplier = 3
    let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
    print(message)
    
    1. 可以在扩展字符串分隔符中创建一个包含在其他情况下,会被当作字符串插值的字符
    2. 要在使用扩展分隔符的字符串中使用字符串插值,在反斜杠后使用匹配首尾#号
    print(#"Write an interpolated string in Swift using \(multiplier)."#)
    print(#"6 times 7 is \#(6 * 7)."#)
    

    String 使用索引访问和修改字符串

    • 字符串索引
    1. 每一个String值都有相关的索引类型,String.Index,她相当于每个character在字符串中的位置
    2. startIndex 属性来访问String 中第一个Character的位置,endIndex属性就是String中最后一个字符串的位置
    3. endIndex属性并不是字符串下标脚本的合法实际参数
    4. 如果 String 为空,则starIndex 与 endIndex相等
    var greeting = "Guten Tag"
    print(greeting[greeting.startIndex])
    print(greeting[greeting.index(before: greeting.endIndex)]) //最后一个字符
    
    1. 使用 index(before:) 和 index(after:) 方法来访问给定索引的前后
    2. 要访问给定索引更远的索引,可以使用 index(_:offsetBy:)
    3. 使用indices 属性来访问字符串中每一个字符的索引
    print(greeting[greeting.index(before: greeting.endIndex)])
    print(greeting[greeting.index(after: greeting.startIndex)])
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    print(greeting[index])
    for c in greeting.indices {
        print(greeting[c])
    }
    
    • 插入
    1. 插入字符,使用 insert(_:at:)方法
    2. 插入另一个字符串的内容到指定的索引,使用insert(contentsOf:at)方法
    var welcome = "hello"
    welcome.insert("!", at: welcome.endIndex)
    print(welcome)
    welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
    print(welcome)
    
    • 删除
    1. 移除字符,使用remove(at:)方法
    2. 移除一小段特定范围的字符串,使用removeSubrange(_:)方法
    welcome.remove(at: welcome.index(before: welcome.endIndex))
    print(welcome)
    let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
    welcome.removeSubrange(range)
    print(welcome)
    

    String 获取子字符串和进行字符串比较

    • 子字符串
    1. 使用下标或者类似 prefix(_:) 的方法得到的子字符串是 Substring 类型
    2. Substring 拥有 string 的大部分方法
    3. Substring 可以转成 string 类型
    var greeting = "hello world!"
    let index = greeting.firstIndex(of: "o") ?? greeting.endIndex
    let beginning = greeting[..<index]
    print(String(beginning))
    
    1. 子字符串重用一部分原字符串的内存
    2. 修改字符串或者子字符串之前都不需要花费拷贝内存的代价
    3. String 和 Substring 都遵循 StringProtocol 协议,也就是说它基本上很方便的兼容所有接受 StringProtocol 值的字符串操作函数
    • 字符串比较
    1. 字符串和字符相等性(== 和 !=)
    2. 前缀相等性 hasPrefix(_:)
    3. 后缀相等性 hasSuffix(_:)
    var welcome = "hello world"
    var welcome1 = "hello"
    print(welcome == welcome1)
    print(welcome.hasPrefix("hello"))
    print(welcome.hasSuffix("world"))
    

    相关文章

      网友评论

          本文标题:Swift中的 String字符串

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