Swift学习笔记基础语法-字符串与字符

1.初始化空字符串

        var emptyStr1 = ""
        var emptyStr2 = String()
        if emptyStr1.isEmpty{
            print("empty string")               //empty string
        }
        if emptyStr2.isEmpty{
            print("empty string2")              //empty string2
        }

2.字符串的可变性

        /**
        *  var 定义的字符串可以修改
        */
        emptyStr2 += "hello"
        print(emptyStr1)

        /**
        *  let 使一个字符串不被修改
        */
        //下面用法是错的
        let constString = "can't be modified"
        constString += "true"

3.字符串的值类型

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

    注意:
    与 Cocoa 中的NSString不同,当您在 Cocoa 中创建了一个NSString实例,并将其传递给一个函数/方法,或者赋值给一个变量,您传递或赋值的是该NSString实例的一个引用,除非您特别要求进行值拷贝,否则字符串不会生成新的副本来进行赋值操作。

    Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值。 很明显无论该值来自于哪里,都是您独自拥有的。 您可以确信传递的字符串不会被修改,除非你自己去修改它。

    在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您将字符串作为值类型的同时可以获得极高的性能。

4.字符的使用

        //定义字符常量或变量
        let testCharacter : Character = "@"
        //字符数组初始化字符串
        let stringCharacters : [Character] = ["s","t","r","i","n","g"]
        let aString = String(stringCharacters)
        print(aString)

        //使用字符
        for c in emptyStr2.characters{
            print(c)
        }
        /*
        输出
        h
        e
        l
        l
        o
        */


        //计算字符数量
        let totalString = "This is a total String LOL "
        print("totalString has \(totalString.characters.count) characters")

5.字符串的使用

        //字符串索引
        var computer = "MacBook Air!"
        computer[computer.startIndex]                   // M
        computer[computer.endIndex.predecessor()]       // !
        computer[computer.startIndex.successor()]       // a
        let index = computer.startIndex.advancedBy(3)
        computer[index]                                 // B

        //索引越界会运行时报错
        computer.endIndex.successor() //fatal error: can not increment endIndex

        //字符串插入
        //method 1
        computer.insert("!", atIndex: computer.endIndex)
        //method 2
        computer.insertContentsOf("is very good".characters, at: computer.endIndex.predecessor())
        print(computer)

        //字符串删除
        //method 1
        computer.removeAtIndex(computer.endIndex.predecessor())
        //method 2 指定索引删除范围内的每个字符
        let range = computer.endIndex.advancedBy(-5)..// MacBook Air!is very


        //字符串比较
        //字符串相等
        let equalString1 = "good day"
        let equalString2 = "good day"
        if equalString1 == equalString2{
            print("same")
        }

        //前缀相同
        let name = ["张三1","张三2","张三3","李四1","李四2"];
        var 姓张的 = 0;
        for nameWithZhang in name{
            if nameWithZhang.hasPrefix("张"){
                ++姓张的
            }
        }
        print("姓张的有\(姓张的)人")                //姓张的有3人

        //后缀相同
        var 结尾是1的 = 0
        for nameSuffix1 in name{
            if nameSuffix1.hasSuffix("1"){
                ++结尾是1的
            }
        }

        print("结尾是1的有\(结尾是1的)人")

你可能感兴趣的:(Swift)