最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift教程之字符串和字符詳解

 更新時間:2015年01月12日 11:01:50   投稿:junjie  
這篇文章主要介紹了Swift教程之字符串和字符詳解,本文講解了字符串常量、初始化一個空串、變長字符串、字符串不是指針,而是實(shí)際的值、字符等內(nèi)容,需要的朋友可以參考下

一個字符串String就是一個字符序列,像”hello,world”,”albatross”這樣的。Swift中的字符串是用String關(guān)鍵詞來定義的,同時它也是一些字符的集合,用Character定義。

Swift的String和Character類型為代碼提供了一個快速的,兼容Unicode的字符解決方案。String類型的初始化和使用都是可讀的,并且和C中的strings類似。同時String也可以通過使用+運(yùn)算符來組合,使用字符串就像使用Swift中的其他基本類型一樣簡單。

1、字符串常量

在代碼中可以使用由String預(yù)先定義的字符串常量,定義方式非常簡單:

復(fù)制代碼 代碼如下:

let someString = “Some string literal value”

字符串常量可以包括下面這些特殊字符:

空字符\0,反斜杠\,制表符\t,換行符\n,回車符\r,雙引號\”和單引號\'

單字節(jié)Unicode字符,\xnn,其中nn是兩個十六進(jìn)制數(shù)

雙字節(jié)Unicode字符,\unnnn,其中nnnn是四個十六進(jìn)制數(shù)

四字節(jié)Unicode字符,\Unnnnnnnn,其中nnnnnnnn是八個十六進(jìn)制數(shù)

下面的代碼給出了這四種字符串的例子:

復(fù)制代碼 代碼如下:

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\x24" // $, Unicode scalar U+0024
let blackHeart = "\u2665" // ♥, Unicode scalar U+2665
let sparklingHeart = "\U0001F496" // , Unicode scalar U+1F496

2、初始化一個空串

初始化一個空串時有兩種形式,但是兩種初始化方法的結(jié)果都一樣,表示空串

復(fù)制代碼 代碼如下:
 
var emptyString = "" // empty string literal
var anotherEmptyString = String() // initializer syntax
// these two strings are both empty, and are equivalent to each other

通過isEmpty屬性可以檢查一個字符串是否為空
復(fù)制代碼 代碼如下:

if emptyString.isEmpty {
println("Nothing to see here")
}
// prints "Nothing to see here"

3、變長字符串

如果使用var關(guān)鍵詞定義的字符串即為可修改的變長字符串,而let關(guān)鍵詞定義的字符串是常量字符串,不可修改。

復(fù)制代碼 代碼如下:
 
var variableString = "Horse"
variableString += " and carriage"
// variableString is now "Horse and carriage"
let constantString = "Highlander"
constantString += " and another Highlander"
// this reports a compile-time error - a constant string cannot be modified

4、字符串不是指針,而是實(shí)際的值

在Swift中,一個String類型就是一個實(shí)際的值,當(dāng)定義一個新的String,并且將之前的String值拷貝過來的時候,是實(shí)際創(chuàng)建了一個相等的新值,而不是僅僅像指針那樣指向過去。

同樣在函數(shù)傳遞參數(shù)的時候,也是傳遞的實(shí)際值,并且創(chuàng)建了一個新的字符串,后續(xù)的操作都不會改變原有的String字符串。

5、字符

Swift的字符串String就是由字符Character組成的,每一個Character都代表了一個特定的Unicode字符。通過for-in循環(huán),可以遍歷字符串中的每一個字符:

復(fù)制代碼 代碼如下:
 
for character in "Dog!" {
println(character)
}
// D
// o
// g
// !
//

你也可以僅僅定義一個單獨(dú)的字符:

復(fù)制代碼 代碼如下:
 
let yenSign: Character = "¥"

6、字符計(jì)數(shù)

使用全局函數(shù)countElements可以計(jì)算一個字符串中字符的數(shù)量:

復(fù)制代碼 代碼如下:
 
let unusualMenagerie = "Koala , Snail , Penguin , Dromedary "
println("unusualMenagerie has \(countElements(unusualMenagerie)) characters")
// prints "unusualMenagerie has 40 characters"

7、組合使用字符和字符串

String和Character類型可以通過使用+號相加來組合成一個新的字符串

復(fù)制代碼 代碼如下:
 
let string1 = "hello"
let string2 = " there"
let character1: Character = "!"
let character2: Character = "?"
let stringPlusCharacter = string1 + character1 // equals "hello!"
let stringPlusString = string1 + string2 // equals "hello there"
let characterPlusString = character1 + string1 // equals "!hello"
let characterPlusCharacter = character1 + character2 // equals "!?"

也可以使用+=號來組合:

復(fù)制代碼 代碼如下:
 
var instruction = "look over"
instruction += string2
// instruction now equals "look over there"
var welcome = "good morning"
welcome += character1
// welcome now equals "good morning!"

8、使用字符串生成新串

通過現(xiàn)有的字符串,可以使用如下方法來生成新的字符串:

復(fù)制代碼 代碼如下:
 
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message is "3 times 2.5 is 7.5"

在上面這個例子中,首先使用multiplier這個字符串3,來作為新串的一部分,用(multiplier)添加,同時上面的例子還用到了類型轉(zhuǎn)換Double(multiplier),將計(jì)算結(jié)果和字符串本身都作為元素添加到了新的字符串中。

9、字符串比較

Swift提供三種方法比較字符串的值:字符串相等,前綴相等,和后綴相等
字符串相等
當(dāng)兩個字符串的包含完全相同的字符時,他們被判斷為相等。

復(fù)制代碼 代碼如下:

let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
println("These two strings are considered equal")
}
// prints "These two strings are considered equal"
//輸出”These two strings are considered equal”

前綴(prefix)相等和后綴(hasSuffix)相等

使用string 類的兩個方法hasPrefix和hasSuffix,來檢查一個字符串的前綴或者后綴是否包含另外一個字符串,它需要一個String類型型的參數(shù)以及返回一個布爾類型的值。兩個方法都會在原始字符串和前綴字符串或者后綴字符串之間做字符與字符之間的。

下面一個例子中,用一個字符串?dāng)?shù)組再現(xiàn)了莎士比亞的羅密歐與朱麗葉前兩幕的場景。

復(fù)制代碼 代碼如下:

let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]

你可以使用hasPrefix 方法和romeoAndJuliet數(shù)組 計(jì)算出第一幕要表演多少個場景。

復(fù)制代碼 代碼如下:
 
var act1SceneCount = 0
for scene in romeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
++act1SceneCount
}
}
println("There are \(act1SceneCount) scenes in Act 1")
//輸出”There are 5 scenes in Act 1”

同理,使用hasSuffix 方法去計(jì)算有多少個場景發(fā)生在Capulet公館和Friar Lawrence牢房

復(fù)制代碼 代碼如下:

var mansionCount = 0
var cellCount = 0
for scene in romeoAndJuliet {
if scene.hasSuffix("Capulet's mansion") {
++mansionCount
} else if scene.hasSuffix("Friar Lawrence's cell") {
++cellCount
}
}
println("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// 輸出 "6 mansion scenes; 2 cell scenes”

大小寫字符串

你可以從一個String類型的uppercaseString 和 lowercaseString中獲得一個字符串的大寫或小寫。

復(fù)制代碼 代碼如下:
 
let normal = "Could you help me, please?"
let shouty = normal.uppercaseString
// shouty is equal to "COULD YOU HELP ME, PLEASE?"
let whispered = normal.lowercaseString
// whispered is equal to "could you help me, please?"

10、Unicode

Unicode是編碼和表示文本的國際標(biāo)準(zhǔn)。它幾乎可以顯示所有語言的所有字符的標(biāo)準(zhǔn)形態(tài)。還可以從類似于文本文件或者網(wǎng)頁這樣的外部源文件中讀取和修改他們的字符。

Unicode術(shù)語

每一個Unicode字符都能被編碼為一個或多個unicode scalar。一個unicode scalar是一個唯一的21位數(shù)(或者名稱),對應(yīng)著一個字符或者標(biāo)識。例如 U+0061是一個小寫的A (“a”), 或者U+1F425是一個面向我們的黃色小雞

當(dāng)一個Unicode字符串寫入文本或者其他儲存時,unicode scalar會根據(jù)Unicode定義的格式來編碼。每一個格式化編碼字符都是小的代碼塊,稱成為code units.他包含UTF-8格式(每一個字符串由8位的code units組成)。和UTF-16格式(每一個字符串由16位的code units組成)

Unicode字符串

Swift 支持多種不同的方式取得Unicode字符串.
你可以使用for-in語句遍歷字符串,來獲得每一個字符的Unicode編碼值。這個過程已經(jīng)在字符(Working with Characters)描述過了。
或者,下面三個描述中使用合適的一個來獲得一個字符串的值
UTF-8字符編碼單元集合使用String類型的utf-8屬性
UTF-16字符編碼單元集合使用String類型的utf-16屬性
21位Unicode標(biāo)量集合使用String類型的unicodeScalars屬性
下面的每一個例子展示了不同編碼顯示由 D , o , g , !

(DOG FACE, 或者Unicode標(biāo)量 U+1F436)字符組成的字符串
UTF-8
你可以使用String類型的utf8屬性遍歷一個UTF-8編碼的字符串。這個屬性是UTF8View類型
,UTF8View是一個8位無符號整形(UInt8)的集合,集合中的每一個字節(jié)都是UTF-8編碼。

復(fù)制代碼 代碼如下:

for codeUnit in dogString.utf8 {
print("\(codeUnit) ")
}
print("\n")
// 68 111 103 33 240 159 144 182

在上面的例子中,前4個十進(jìn)制codeunit值(68,111,103,33)顯示為字符串 D , o ,g 和 ! ,和他們的ASCII編碼相同一樣。后面4個codeunit的值(240,159,144,182)是DOG FACE字符的4字節(jié)UTF-8編碼。

UTF-16

你可以使用String類型的utf16屬性遍歷一個UTF-16編碼的字符串。這個屬性是UTF16View類型,UTF16View是一個16位無符號整形(UInt16)的集合,集合中的每一個字節(jié)都是UTF-16編碼。

復(fù)制代碼 代碼如下:
 
for codeUnit in dogString.utf16 {
print("\(codeUnit) ")
}
print("\n")
// 68 111 103 33 55357 56374

同理,前4個十進(jìn)制codeunit值(68,111,103,33)顯示為字符串 D , o ,g 和 ! ,他們的UTF-16 的codeunit和他們UTF-8的編碼值相同。
第5和第6個codeunit值(55357和56374)是DOG FACE字符的UTF-16的代理對編碼。他們的值是由值為U+D83D(十進(jìn)制55357)的高位代理(lead surrogate)和值為U+DC36 (十進(jìn)制56374)的低位代理(trail surrogate)組成。

Unicode標(biāo)量

你可以使用String類型的unicodeScalars屬性遍歷一個Unicode標(biāo)量編碼的字符串。這個屬性是UnicodeScalarsView類型,UnicodeScalarsView是一個UnicodeScalar類型的集合。每一個Unicode標(biāo)量都是一個任意21位Unicode碼位,沒有高位代理,也沒有低位代理。

每一個UnicodeScalar使用value屬性,返回標(biāo)量的21位值,每一位都是32位無符號整形(UInt32)的值:

復(fù)制代碼 代碼如下:
 
for scalar in dogString.unicodeScalars {
print("\(scalar.value) ")
}
print("\n")
// 68 111 103 33 128054

value屬性在前4個UnicodeScalar值(68,111,103,33)再一次展示編碼了字符 D , o , g 和 ! 。第五個也是最后一個UnicodeScalar 是DOG FACE字符,十進(jìn)制為128054,等價于16進(jìn)制的1F436,相當(dāng)于Unicode標(biāo)量的U+1F436。
每一個UnicodeScalar可以被構(gòu)造成一個新的字符串來代替讀取他們的value屬性,類似于插入字符串。

復(fù)制代碼 代碼如下:
 
for scalar in dogString.unicodeScalars { println("\(scalar) ") }
// D
// o
// g
// !
//

相關(guān)文章

  • Swift、Objective-C、Cocoa混合編程設(shè)置指南

    Swift、Objective-C、Cocoa混合編程設(shè)置指南

    這篇文章主要介紹了Swift、Objective-C、Cocoa混合編程設(shè)置指南,需要的朋友可以參考下
    2014-07-07
  • Swift如何使用類型擦除及自定義詳解

    Swift如何使用類型擦除及自定義詳解

    有很多地方會用到類型擦除,并且它們的作用的各不相同。下面這篇文章主要給大家介紹了關(guān)于Swift如何使用類型擦除及自定義的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • Flutter iOS開發(fā)OC混編Swift動態(tài)庫和靜態(tài)庫問題填坑

    Flutter iOS開發(fā)OC混編Swift動態(tài)庫和靜態(tài)庫問題填坑

    這篇文章主要為大家介紹了Flutter iOS OC 混編 Swift動態(tài)庫和靜態(tài)庫問題填坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Swift使用編解碼庫Codable的過程詳解

    Swift使用編解碼庫Codable的過程詳解

    Codable 是 Swift 引入的全新的編解碼庫,使開發(fā)者更方便的解析JSON 或 plist 文件,支持枚舉、結(jié)構(gòu)體和類,這篇文章主要介紹了Swift使用編解碼庫Codable,需要的朋友可以參考下
    2023-09-09
  • Swift?reduce函數(shù)使用示例詳解

    Swift?reduce函數(shù)使用示例詳解

    這篇文章主要為大家介紹了Swift?reduce函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Swift 4.2使用self做為變量名淺析

    Swift 4.2使用self做為變量名淺析

    這篇文章主要給大家介紹了關(guān)于Swift 4.2使用self做為變量名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Swift中的指針操作和使用詳細(xì)介紹

    Swift中的指針操作和使用詳細(xì)介紹

    這篇文章主要介紹了Swift中的指針操作和使用詳細(xì)介紹,Apple期望在Swift中指針能夠盡量減少登場幾率,因此在Swift中指針被映射為了一個泛型類型,并且還比較抽象,本文詳細(xì)講解了Swift中指針的相關(guān)知識,需要的朋友可以參考下
    2015-01-01
  • swift3.0指紋解鎖的實(shí)現(xiàn)方法

    swift3.0指紋解鎖的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了swift3.0指紋解鎖的實(shí)現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Swift中圖片資源使用流程的優(yōu)化方法詳解

    Swift中圖片資源使用流程的優(yōu)化方法詳解

    這篇文章主要給大家介紹了關(guān)于Swift中圖片資源使用流程的優(yōu)化方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Swift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下
    2021-11-11

最新評論

壶关县| 南川市| 来宾市| 共和县| 永新县| 六盘水市| 云龙县| 湖南省| 江安县| 吴江市| 微山县| 肥东县| 中牟县| 昔阳县| 察哈| 泗阳县| 綦江县| 揭阳市| 大渡口区| 峨山| 夏河县| 安宁市| 兰溪市| 平武县| 潼关县| 广宁县| 乾安县| 凤翔县| 城口县| 准格尔旗| 阿合奇县| 九江市| 前郭尔| 会同县| 积石山| 洞头县| 萍乡市| 老河口市| 高清| 龙游县| 胶南市|