美文网首页
《Swift学习笔记》06 - 字符和字符串简介

《Swift学习笔记》06 - 字符和字符串简介

作者: ShIwEn9 | 来源:发表于2019-07-31 14:23 被阅读0次

    介绍:Swift 语言由苹果公司在 2014 年推出,用来撰写 Mac OS 和 iOS 应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org
    目前Swift已经发展到了第五版本。显然苹果大有推翻 OC “江山”的意思.
    今天就来初探一下Swift,看看究竟为何swift有这么大的能力。
    参考内容:
    Swift中文
    YungFan老师

    swift
    一、 字符串和字符

    字符串是一系列的字符的集合,数据类型为string;
    字符是一个单一的字符字符串字面量,数据类型为 Character;
    String的内容可以通过各种方法来访问到,包括作为 Character值的集合。

    for ch in "ShIwEn" {
        print(ch);
    }
    /*
    S
    h
    I
    w
    E
    n
    */
    
    let str6 = "aBcDeFg"
    for (index, value) in str6.enumerated() {
        print("\(index) -- \(value)")
    }
    0 -- a
    1 -- B
    2 -- c
    3 -- D
    4 -- e
    5 -- F
    6 -- g
    

    String值可以通过传入 Character值的字符串作为实际参数到它的初始化器来构造:

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

    Swift中的每一个字符串 string 都是由 Unicode 字符的独立编码组成,并且提供了多种 Unicode 表示下访问这些字符的支持。
    Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。(来源于百度知道)

    二、定义字符串
    1. 定义不可变字符串
    let name = "ShIwEn"
    
    1. 定义可变字符串
    var name2 =  "ShIwEn"
    
    1. 定义一个空的字符串
    var name3: string = string()
    var name4 = ""
    

    Swift 会为 name和name2推断类型为 String,因为你用了字符串字面量值来初始化

    1. 定于多行字符串

    4.1 通过 """ 来实现多行字符串

    // 多行字符串
    var str_double =
    """
    静夜思
    作者:李白
    床前明月光,疑是地上霜。
    举头望明月,低头思故乡。
    """
    print(str_double)
    
    静夜思
    作者:李白
    床前明月光,疑是地上霜。
    举头望明月,低头思故乡。
    

    4.2 当多行字符串字面量里包含了换行
    当你的代码中在多行字符串字面量里包含了换行,那个换行符同样会成为字符串里的值。如果你想要使用换行符来让你的代码易读,却不想让换行符成为字符串的值,那就在那些行的末尾使用反斜杠( \ ):

    // 当字符串中有转义字符的时候
    let annwn = """
    本人实习生, \
    如果各位老板,公司正好缺ios开发,请联系我.
    
    "最好公司是杭州南京的 \
    电话:17855354749."
    """
    print(annwn)
    

    4.3 扩展字符串:分隔符# 的使用

    //如果字符串声明被 # 号包裹,\ 不需要转义
    let str = #"字符串中有\转义字符反斜杠\"#
    print(str)
    字符串中有 \ 转义字符反斜杠
    
    //假如字符串中有 # 怎么办?用两个#包裹字符串
    let str2 = ##"字符串中有#转义字符反斜杠\"##
    print(str2)
    字符串中有 # 转义字符反斜杠 \ 
    

    如果你需要字符串中某个特殊符号的效果,使用使用匹配你包裹的井号数量的井号并在前面写转义符号 \ 。比如说,如果字符串是 #"Line 1\nLine 2"# 然后你想要让这个字符串输出两行,你可以使用 #"Line 1\#nLine 2"# ,类似地, ###"Line1\###nLine2"### 也会输出两行

    三、字符串的常用操作
    1. 拼接字符串
      1.1 通过 + 拼接
    let str4 = "abc" + "def"
    print(str4)
    adcdef
    
    let string1 = "hello"
    let string2 = " there"
    var instruction = "look over"
    instruction += string2
    

    1.2 通过 append 方法实现

    // append
    var str5 : String = str4.appending("abc")
    print(str5)
    

    你不能把 String或者 Character追加到已经存在的 Character变量当中,因为 Character值能且只能包含一个字符

    1. 字符串的长度
      通过 count 方法实现
    //长度
    let str3 = "1234567"
    print(str3.count)
    print((str3 as NSString).length)
    
    1. 字符串插值
      和打印有些类似
    let multiplier = 3
    let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
    // message is "3 times 2.5 is 7.5"
    
    1. 是否包含某元素
      通过方法 contains
    // 含有字符串
    let str7 = "abcdefg"
    print(str7.contains("cd")) // true
    print(str7.contains("a"))  // true
    print(str7.contains("o"))  // false
    
    1. 分割字符串
      通过 components()方法
    // 串分割
    let str8 = "abcdefg$$aaaaa$bbbbb$ccccc"
    let descArr = str8.components(separatedBy: "$$")
    
    for item in descArr {
        print("串分割 item = \(item)")
    }
    
    1. 大小写转换
      lowercased(): 转化为小写
      uppercased():转化为大写
    let str6 = "aBcDeFg"
    print(str6.lowercased()) // 全部小写
    print(str6.uppercased()) // 全部大写
    
    1. 字符串的替换
      通过replacingOccurrences()方法时间。和OC中的命名都有些类似
    let str9 = "abcdefg$$aaaaa$bbbbb$ccccc"
    let dest11 = str9.replacingOccurrences(of: "$$", with: "**")
    print("\(dest11)")
    
    1. 字符串索引和子串
      每一个 String值都有相关的索引类型, String.Index,它相当于每个 Character在字符串中的位置。
      使用 startIndex属性来访问 String中第一个 Character的位置。 endIndex属性就是 String中最后一个字符后的位置。所以说, endIndex属性并不是字符串下标脚本的合法实际参数。如果 String为空,则 startIndex与 endIndex相等。

      使用 index(before:) 和 index(after:) 方法来访问给定索引的前后。要访问给定索引更远的索引,你可以使用 index(_:offsetBy:) 方法而不是多次调用这两个方法。
    let greeting = "Guten Tag!"
    greeting[greeting.startIndex]
    // G
    greeting[greeting.index(before: greeting.endIndex)]
    // !
    greeting[greeting.index(after: greeting.startIndex)]
    // u
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index]
    // a
    
    let str10 = "I Love You"
    // 截取某字符串的前5个字符串
    let sub1 = str10.prefix(5)
    // 截取某字符串的后5个字符串
    let sub2 = str10.suffix(5)
    
    // 从某个位置开始
    let index = str10.index(str10.endIndex, offsetBy: -5)
    let sub3 = str10[index..<str10.endIndex] //截取某字符串的后5个字符串
    
    //截取某字符串的第3个字符到第6个字符范围的字符串
    //截取某字符串的第3个字符到第6个字符范围的字符串
    let index2 = str10.index(str10.startIndex, offsetBy: 4) // 先获取截取 开始的第四位
    let sub4 = str[..<index2]
    
    let index3 : String.Index = str10.index(str10.endIndex, offsetBy: -3) // 结束前的第三位
    
    // 从某个位置开始 到某个位置结束
    let sub5 = str10[index2..<index3]
    
    1. 插入和删除字符串 swift5中已经移除
      使用 insert(_:at:)方法,给字符串特定索引位置插入字符。
    var str11 = "i am annwn, a code dog"
    let index4 = str11.index(str11.startIndex, offsetBy: 2)
    str11.insert("q", at: index4)
     
    str11.insert(contentsOf: " q", at: welcome.index(before: welcome.endIndex))
    
    

    使用 remove(at:)方法,从字符串的特定索引位置移除字符:

    str11.remove(at: index4)
    

    另外要移除一小段特定范围的字符串,使用 removeSubrange(_:) 方法:

    let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
    welcome.removeSubrange(range)
    // welcome now equals "hello"
    

    你可以在任何遵循了 RangeReplaceableIndexable 协议的类型中使用 insert(_:at:) , insert(contentsOf:at:) , remove(at:) 方法。这包括了这里使用的 String ,同样还有集合类型比如 Array , Dictionary 和 Set 。

    字符和字符串就学习这里了

    有什么不足的地方欢迎补充。文章大多数内容来自:

    Swift中文
    YungFan老师
    再次感谢!

    求职广告:本人实习生,现在急需一份工作,杭州南京合肥的都可以。对我感兴趣的可以私聊我 0.0。谢谢~~~

    相关文章

      网友评论

          本文标题:《Swift学习笔记》06 - 字符和字符串简介

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