• <small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small><xmp id="w8oog"><td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><xmp id="w8oog"><td id="w8oog"></td>
  • <td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small>
  • <small id="w8oog"></small><td id="w8oog"></td>
    免費開源的iOS開發學習平臺

    Swift: 4 字符串和字符

    字符串是由0個或多個字符組成的有限序列。在Swift語言中,字符串類型是String, 創建和操作字符串的語法和C語言中字符串操作相似。在Swift語言中,String類型與Objective-C的Foundation NSString類進行了無縫橋接。本章主要介紹String的一些特性。

    定義字符串

    • 在Swift語言中,通過雙引號”""“包裹著固定順序的文本字符集構成的字符串字面量(String Literal)來給字符串變量和常量提供初始化的值。同時也可以通過初始化一個新的String實例進行賦值。
    • String類型是值類型,在進行字符串賦值操作時或者在函數中被傳遞時,會進行值復制操作。而在Cocoa中創建的NSString實例,被操作的或者傳遞的是該NSString實例的一個引用。下面展示了字符串的定義示例。
    let aString = " A string with literal value"
    let specailString = "String with \"special value\""
    var emptyString = String()
    
    //通過isEmpty屬性判斷字符串是否為空
    if emptyString.isEmpty{
        print("emptyString is empty")
    }
    
    
    emptyString += aString //連接操作
    var antoherString = emptyString //賦值操作,值復制
    antoherString += specailString  //改變字符串
    emptyString //跟antoherString不同了
    
    • 示例代碼運行結果:

    字符串基本操作

    • String 類型表示特定序列的Character(字符)類型值得集合。每一個字符值代表一個Unicode字符。在Swift程序中,可利用for-in循環來遍歷字符串的characters屬性。同時,可以通過characters的count屬性來獲取字符串的長度值。如下代碼所示。
    var str = "Hello Swift"
    /*
     str.characters 是字符串變量的字符集合
     temp 是臨時變量
     for in 會遍歷字符集合,然后把每個字符賦值給臨時變量
     */
    
    for temp in str.characters {
        print(temp,terminator:"")
    }
    print("\nCount:",terminator:"");
    let count = str.characters.count
    print(count);
    
    • String可以通過加法運算符(+)相加在一起,并且創建一個新的字符串值。同時,也可以通過"+="來拼接組成新的字符串。
    let constStr = "Who is"
    var varStr = " Li's"
    varStr = constStr + varStr
    //現在varStr的值是"Who is"
    varStr += " and Han"
    //現在varStr的值是 "Who is Li's and Han"
    
    • 在Swift中,可以通過使用字符串插值的方式來構建新的字符串,也就是在其中包含常量、變量、字面量和表達式。插入的字符串字面量的每一項都被包裹在以反斜線為前綴的圓括號中,如下代碼所示:
    let one = 1
    let two = 2
    let output = "\(one) add \(two)  equal to \(one+two)"
    //output的值是:1加上2等于3
    
    • 如果兩個字符串以同一順序包含完全相同的字符,則認為兩者字符串相等。通過調用字符串的hasPrefix/hasSuffix方法來檢查字符串是否擁有特定前綴/后綴。這兩個方法均需要以字符串作為參數傳入并返回Boolean值,并且都執行基本字符串和前綴/后綴字符串之間逐個字符的比較操作。
        let str1 = "I am a str."
        let str2 = "I am a str."
        let str3 = "I am a str too."
        if str1 == str2 {
            print("str1 is equal to str2")
        }
        //打印輸出 "str1 is equal to str2"
        if str1 != str3{
            print("str1 is not equal to str3")
        }
        //打印輸出 "str1 is not equal to str3"
        if str1.hasPrefix("I am"){
            print("str1 has prefix string \"I am\"")
        }
        //打印輸出 "str1 has prefix string "I am""
        if str1.hasSuffix("str."){
            print("str1 has suffix string \"str.\"")
        }
        //打印輸出 "str1 has suffix string "str.""
    
    • 示例代碼運行結果,如下圖。

    獲取和修改字符串中的值

    可以通過使用下標語法或者使用字符串類型的函數、屬性來讀取或者修改字符串的值。

    • 由于字符序列中的每個字符占用的內存空間不同,所以不能通過整數下標這種方式來獲取某個字符,相應地Swift為每個字符串提供了String.index類型來對應字符串中的每個字符的位置信息。String的startIndex屬性可以獲取字符串的第一個字符,endIndex屬性指向的是最后一個字符的后一個位置。所以說,endIndex不是String的合法的下標。如果字符串為空,startIndex和endIndex相等??梢酝ㄟ^String類型的index(before:)和index(after:)函數來每次向前或者向后移動一個下標指針位置,也可以通過index(_:offsetBy:)函數來每次移動多個位置。示例代碼如下。
    let sayIt = "Just do It!"
    sayIt[sayIt.startIndex] // J
    sayIt[sayIt.index(before:sayIt.endIndex)] // !
    sayIt[sayIt.index(after:sayIt.startIndex)]// u
    let index = sayIt.index(sayIt.startIndex,offsetBy:5)
    sayIt[index] //d
    
    //for循環遍歷字符串,通過字符串的characters的indices屬性來獲取字符串的所有的下標集合
    for index in sayIt.characters.indices {
        print("\(sayIt[index]) ", terminator:"")
    }
    // 打印結果: "J u s t  d o  I t ! "
    
    sayIt[sayIt.endIndex] // 報錯,越界
    sayIt.index(after: sayIt.endIndex) // 報錯,越界
    
    • 可以通過使用String類型的insert(_:at)函數向字符串中插入一個字符,使用insert(contentsOf:at:)函數來插入一個字符串。相反的,使用remove(at:)來移除一個字符,使用removeSubrange(_:)來移除一段子字符串。如下示例代碼:
    var sayHello = "Say"
    sayHello.insert("!",at:sayHello.endIndex)
    //sayHello現在是“Say!"
    
    sayHello.insert(contentsOf:" hello".characters, at: sayHello.index(before: sayHello.endIndex))
    //sayHello現在是"Say hello!"
    
    sayHello.remove(at:sayHello.index(before:sayHello.endIndex))
    //sayHello現在是"Say hello"
    
    let range = sayHello.index(sayHello.endIndex, offsetBy:-6)..<sayHello.endIndex
    sayHello.removeSubrange(range)
    //sayHello現在是“Say"
    
    • 示例代碼運行如下截圖。

    示例代碼

    https://github.com/99ios/23.4

    ijzzijzzij亚洲大全|天天狠天天透天干天天|日本一本加勒比五月天伊人久久|久久久噜噜噜久久中文字幕色伊伊
  • <small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small><xmp id="w8oog"><td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><xmp id="w8oog"><td id="w8oog"></td>
  • <td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small>
  • <small id="w8oog"></small><td id="w8oog"></td>