美文网首页
从 字符串 到 Swift

从 字符串 到 Swift

作者: overla5 | 来源:发表于2019-10-08 15:48 被阅读0次

    字符串就像糖葫芦,每个位置都有一颗相差不大的糖球

    • 字符串的初始化
    1. 字符串字面量(提供初始值)
    let string = "一串有2个糖球的糖葫芦"
    
    2. 空字符串字面量
    var emptyString = ""  // 一根签子,可以去串糖葫芦
    let nilString   = ""  // 只有一根签子,不能串糖葫芦
    
    3. 实例化字符串
    var anotherEmptyString = String()  // 别问,我是糖葫芦
    
    4.多行字符串 
    let lineBreakString = """
    卖糖葫芦了
    两块钱一串
    嘿嘿
    """
    

    • 字符串判空
    推荐   :isEmpty (见名知意) 
    不推荐 :count == 0
    
    let string = "一串糖葫芦"
    if string.isEmpty {
        print("字符串为空")
    }
    
    原因:
    count == 0 
    * 读取长度的时候,Swift需要去遍历所有的字符
    * 是一个O(n)的操作
    * 好比有一串糖葫芦,上面有3个糖球,你还是要数一遍才可以判断不为空
    
    isEmpty 
    * 判断开始索引和结束索引是否相同即可
    * 好比有一串糖葫芦,不用关心有几个,只需要关心是不是一根空的签子
    

    isEmpty 和 count == 0 参考链接

    • 字符串是值类型
      在深海里烤着一串刻有字符的扇贝
    * 对二次赋值的字符串进行操作,不会影响到原字符串
    * 类似OC中用copy 修饰的字符串 
    
    var s1 = "我是人"
    var s2 = s1          // 进行一次深拷贝
    s2 = "我是一个克隆人" // s2的改变不会对s1造成影响
    
    print(s1)            // 打印 我是人
    print(s2)            // 打印 我是一个克隆人
    

    • 字符串遍历和长度
    for-in 遍历每个字符
    
    for character in "swag" {
        print(character)
    }
    打印
    s
    w
    a
    g
    
    
    count:属性必须遍历全部的 Unicode 标量,来确定字符串的字符数量
    
    let string = "123456"
    print(string.count) // 6
    

    • 字符串的加法
    1.相加
    var s1 = "斯威"
    let s2 = "夫特"
    
    s1 + s2  //  "斯威夫特"
    s1 += s2 //  同上
    ## 🐷 被添加者必须是变量,文中s1必须是变量
    
    
    2.添加 append (将字符添加到字符串变量的尾部)
    
    let cString: Character = "!"
    s1.append(cString) // "斯威!"
    ## 🐷 不能将一个字符串或者字符添加到一个已经存在的字符变量上,因为字符变量只能包含一个字符
    

    • Raw String
      Swift 5.0 使用 # 包裹字符串,即是原生字符串,减少转义字符的使用
    5.0之前 
    let str = "字符串中有\\转义字符反斜杠\\"
    // 打印 "字符串中有\转义字符反斜杠\"
    
    
    5.0 以后
    如果字符串声明被 井 号包裹,\ 不需要转义,就是说井号 之间 写什么就是什么
    
    let str = #"我要输出\转义字符反斜杠\"#
    // 打印 "我要输出\转义字符反斜杠\"
    
    
    🐷 如果字符串中有 井 这个字符,则用两个井包裹字符串
    let str = ##"字符串中有#这个符号"##
    // 打印 "字符串中有#这个符号"
    

    • 字符串的修改
      endIndex 获取最后一个字符的 < 后一个位置 > 的索引
    var greeting = "🐯🐶🐔"
    
    1.获取首个字符  -> startIndex
    
    greeting[greeting.startIndex]  // 得到 🐯
    
    
    2.获取最后一个字符  -> endIndex
    //  endIndex 获取的位置 相当于你握着糖葫芦的手
    // 手上方就是最后一个糖葫芦,所以要加个before
    
    greeting[greeting.index(before: greeting.endIndex)] // 得到🐔
    
    
    
    3.插入 -> insert
    // 在第一位插入兔子
    greeting.insert("🐇", at: greeting.startIndex)
    // greeting = "🐇🐯🐶🐔"
    
    
    
    4.删除 -> remove
    // 移除最后一个字符
    greeting.remove(at: greeting.index(before: greeting.endIndex))
    // greeting = "🐇🐯🐶"
    
    
    5.移除某一段 removeSubrange
    
    // 移除最后的位置 向前偏移2位 ,也就是最后2位 
    let range = greeting.index(greeting.endIndex,offsetBy:
    -2)..<greeting.endIndex
    
    greeting.removeSubrange(range)
    // greeting = "🐇"
    

    • 字符串的打印技巧
    1.分隔符
    // 输出Hello World,中间用空格分割
    print("Hello", "World", separator: " ") 
    
    
    
    2.同行显示
    *  terminator 结束符,意为回车
    
    print("Hello", terminator: "")
    print("World")
    // 虽然有2个print,但是 HelloWorld 不会换行
    
    
    
    3.字符串插值  
    * \()   斜杠 + 括号
    
    let number = 6
    print("小明今年 \(number) 岁了")
    
    
    4.debugPrint
    // 可以将推断出的类型添加到输出,例如给字符串内容添加双引号
    debugPrint("number")
    // 打印的 "number"
    
    
    • 其它
    1.重复拼接字符串
    
    let  str = String(repeating: "zzz", count: 2)
    print(str)
    // "zzzzzz"
    
    
    2.比较是否相等
     == 
     !=
    
    
    3.大小写
    lowercased()  // 全部小写
    uppercased()  // 全部大写
    
    
    4.首尾是否包含特定前缀/后缀
    hasPrefix 前缀
    hasSuffix 后缀
    

    • 个人笔记,还会补充

    相关文章

      网友评论

          本文标题:从 字符串 到 Swift

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