亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:51:24
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Swift教程之字符串和字符詳解,本文講解了字符串常量、初始化一個空串、變長字符串、字符串不是指針,而是實際的值、字符等內(nèi)容,需要的朋友可以參考下
 

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

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

1、字符串常量

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

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

let someString = “Some string literal value”

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

 

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

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

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

四字節(jié)Unicode字符,/Unnnnnnnn,其中nnnnnnnn是八個十六進制數(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、字符串不是指針,而是實際的值

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

同樣在函數(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
// !
//

你也可以僅僅定義一個單獨的字符:

 

 

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

 

6、字符計數(shù)

使用全局函數(shù)countElements可以計算一個字符串中字符的數(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),將計算結(jié)果和字符串本身都作為元素添加到了新的字符串中。

 

9、字符串比較

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

 

復(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ù)以及返回一個布爾類型的值。兩個方法都會在原始字符串和前綴字符串或者后綴字符串之間做字符與字符之間的。

下面一個例子中,用一個字符串數(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ù)組 計算出第一幕要表演多少個場景。

 

 

復(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 方法去計算有多少個場景發(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是編碼和表示文本的國際標準。它幾乎可以顯示所有語言的所有字符的標準形態(tài)。還可以從類似于文本文件或者網(wǎng)頁這樣的外部源文件中讀取和修改他們的字符。

Unicode術(shù)語

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

當一個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標量集合使用String類型的unicodeScalars屬性
下面的每一個例子展示了不同編碼顯示由 D , o , g , !

(DOG FACE, 或者Unicode標量 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個十進制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個十進制codeunit值(68,111,103,33)顯示為字符串 D , o ,g 和 ! ,他們的UTF-16 的codeunit和他們UTF-8的編碼值相同。
第5和第6個codeunit值(55357和56374)是DOG FACE字符的UTF-16的代理對編碼。他們的值是由值為U+D83D(十進制55357)的高位代理(lead surrogate)和值為U+DC36 (十進制56374)的低位代理(trail surrogate)組成。

 

Unicode標量

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

每一個UnicodeScalar使用value屬性,返回標量的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字符,十進制為128054,等價于16進制的1F436,相當于Unicode標量的U+1F436。
每一個UnicodeScalar可以被構(gòu)造成一個新的字符串來代替讀取他們的value屬性,類似于插入字符串。

 

 

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


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久热国产在线视频| 99在线精品一区二区三区| 免费网站永久免费观看| 欧美亚日韩国产aⅴ精品中极品| 国产淫片在线观看| 蜜桃一区二区三区四区| av日韩电影| 成人在线黄色电影| 国自产拍偷拍精品啪啪一区二区| 日韩高清av电影| 嫩草视频免费在线观看| 欧美激情国产精品| 色之综合天天综合色天天棕色| 国产小视频在线高清播放| 亚洲一区 中文字幕| 亚洲一道本在线| 欧美一级做性受免费大片免费| 精品国产一区二区三区久久久狼牙| 综合网中文字幕| 538任你躁精品视频网免费| 国产精品亚洲人成在99www| 欧美伊人久久大香线蕉综合69| 欧美一区二区三区免费观看| 日本三级在线播放完整版| 午夜亚洲国产au精品一区二区| 国产又粗又猛又爽又黄视频| 亚洲婷婷国产精品电影人久久| 日韩欧美一区二区三区在线视频| 女人裸体性做爰全过| 91精品久久久久久久久久入口| 神马日本精品| 羞羞视频网页| 人妻熟女一二三区夜夜爱| 激情视频综合网| 日韩欧美国产亚洲| 久久99久久99精品免观看软件| japanesexxxxfree在线观看| 国产毛片一区二区三区va在线| 秋霞影院一区二区| 午夜免费啪视频观看视频| 欧美激情网址| 国产人妻人伦精品| 国产精品自拍av| 欧美自拍偷拍第一页| 97久久人人超碰caoprom| 国产精品第一视频| 欧美日韩人妻精品一区二区三区| 亚洲国产一区二区在线观看| 亚洲精品国产手机| 亚洲综合在线第一页| 福利在线一区| 中文字幕在线观看日本| 欧美裸身视频免费观看| 丁香5月婷婷久久| 久久影院中文字幕| 牛人盗摄一区二区三区视频| 久久久久久久久久久久久夜| 亚洲欧美精品aaaaaa片| 亚洲在线免费播放| 日韩久久久久久久久久| 日韩在线观看av| 一区二区三区在线免费视频| 久久国产精品网站| 亚洲深夜福利在线观看| 亚洲一区在线观看免费观看电影高清| 黄色网页免费在线观看| 免费精品视频一区| 国产免费一区二区三区最新6| 日本不卡影院| 亚洲аv电影天堂网| 特级西西444www大精品视频免费看| 天堂资源在线中文| 国产精品黄页免费高清在线观看| 亚洲欧洲美洲一区二区三区| 噜噜噜久久亚洲精品国产品麻豆| 亚洲精品国产综合区久久久久久久| 亚洲欧美成人网| 久久中文字幕在线| 特黄视频在线观看| 97久久国产精品| 一级片视频免费观看| 久久亚洲二区三区| www.亚洲免费av| 黄网站色欧美视频| 欧美www在线| 中文字幕在线观看1| 美女在线不卡| 日韩欧美中文字幕制服| 黄av在线播放| 国产小视频国产精品| 国色天香久久精品国产一区| 精品久久久中文字幕| 激情亚洲网站| 欧美交a欧美精品喷水| 最新日韩三级| 国产精品视频一区麻豆| 午夜免费日韩视频| 午夜影院免费在线| yjizz视频网站在线播放| 精品调教chinesegay| 国产精品18hdxxxⅹ在线| 在线免费观看成人| 亚洲91精品在线观看| 日韩激情免费视频| 51精品视频一区二区三区| 国产伦精品一区二区三区高清版| 国产精品一卡二卡三卡| 亚洲性猛交xxxxwww| 欧美另类高清zo欧美| 亚洲一区中文| 欧美.日韩.国产.一区.二区| 欧美啪啪小视频| 欧美亚洲自偷自偷| 亚洲综合av影视| 懂色av中文字幕一区二区三区| 色猫咪免费人成网站在线观看| 成人小视频免费观看| 国产精品丝袜久久久久久高清| 先锋资源一区二区| 91在线观看免费高清| av大片在线观看| 91香蕉国产视频| 久久99精品一区二区三区三区| 欧美成人a在线| 国产丝袜在线观看视频| 国产精彩视频在线观看| 在线中文字幕日韩| 国产精品视频一区视频二区| 黄色网址在线免费观看| 精品午夜福利在线观看| 女人天堂av手机在线| 欧美午夜在线视频| 亚洲精品在线国产| 欧美一区二区三区婷婷| 国产一级片网站| 精品久久久一区| 色综合色综合色综合色综合| av电影资源| 亚洲天堂美女视频| 一本一道久久久a久久久精品91| 最新中文字幕在线观看视频| 日本高清在线观看视频| 久久精品日产第一区二区三区| 国产精品永久免费在线| www国产精品av| 超碰97在线人人| 日韩av片在线播放| 91影院未满十八岁禁止入内| 成人黄色小视频在线观看| 亚洲级视频在线观看免费1级| 欧美一区二区三区免费在线看| 欧美在线视频不卡| 丝袜a∨在线一区二区三区不卡| 国外色69视频在线观看| 亚洲午夜久久久久中文字幕| 日韩欧美国产二区| 亚洲小说欧美另类激情| 少妇荡乳情欲办公室456视频| 99精品国产在热久久| 日韩av片永久免费网站| 成人午夜免费剧场| 91无套直看片红桃在线观看| 欧美另类中文字幕| 黄色片视频网站| 91免费国产视频网站| 在线观看国产一级片| 日产午夜精品一线二线三线| 高清视频在线观看三级| 久久久www成人免费精品张筱雨| 女囚岛在线观看| 国产精品美女免费| 亚洲欧洲国产日本综合| 精品三级国产| 日韩成人三级| 中文字幕亚洲高清| 日韩尤物视频| 久久久精品中文字幕| 性感美女一区二区在线观看| 欧美一区二区三区艳史| 国产一区二区视频在线播放| 污视频网站在线免费| 五月天综合网| 超碰成人福利| 黄色的视频在线免费观看| 美女被久久久| 成人1区2区| 男女小视频在线观看| 日本三级在线观看网站| 蜜桃av导航| 欧美精品一区二区三区国产精品| 91美女精品福利| 天天插天天干| 99国产精品久久久久久久成人| 涩涩屋成人免费视频软件| 一区二区日本伦理| 免费中文字幕av| 日韩欧美一区二区三区在线观看| 亚洲视频图片小说| 最新中文字幕日本| 日本一区二区成人在线| 99porn视频在线| 26uuu色噜噜精品一区二区| 亚洲美女自拍偷拍| 久久99国产精品一区| xxxxbbbb欧美| 精品一区中文字幕| 操你啦视频分享| julia京香一区二区三区| 中文字幕第17页| 成人午夜电影免费在线观看| 亚洲国产日韩成人综合天堂| 亚洲天堂资源在线| 高清成人在线| 亚洲色图都市激情| 久久精品人人| 国产精品18久久久久网站| av大全在线| 久久91视频| 亚洲精品孕妇| 国产精品chinese| 永久域名在线精品| 国产黄色成人av| 一区二区视频免费观看| 成人免费一区二区三区视频| 欧美日韩精品一区二区视频| 中文字幕在线观看2018| 亚洲成人动漫一区| 国产精品777777在线播放| 国产一区二区三区丝袜| 2014亚洲片线观看视频免费| 欧美一区在线看| 姬川优奈av一区二区在线电影| www.亚洲黄色| 国产成+人+日韩+欧美+亚洲| 伊人免费视频2| 欧美在线3区| 亚洲精品一区国产精品| 国产成人va亚洲电影| 日本女人黄色片| 久久久久成人精品| 日本人妻丰满熟妇久久久久久| 丰满人妻老熟妇伦人精品| 女同互忝互慰dv毛片观看| 亚洲综合色在线观看| 午夜xxxxx| 国产免费人人看| 91小视频在线观看| 中文一区一区三区高中清不卡免费| 亚洲热av色在线播放| 欧美日韩另类在线| 视频一区二区国产| 亚洲图片欧美日韩| 天海翼在线观看视频| 青娱乐国产在线视频| 91久久一区二区| 久久久精品在线视频| 久久精品精品电影网| 精品三级av| 中文字幕观看视频| 九九爱在线视频观看免费视频| 国产精品入口免费视频一| 日韩亚洲欧美高清| 亚洲成人av一区| 日韩videos| 麻豆精品国产传媒mv男同| 在线观看国产一级片| 国产丝袜美女| 一级片久久久久| 91麻豆制片厂| 美女视频久久久| 少妇高潮一区二区三区69| 色美美综合视频| 国产精品美女主播在线观看纯欲| 色哟哟免费网站| 国产精品免费区二区三区观看| 亚洲中文字幕无码一区| 欧美国产激情一区二区三区蜜月| 狠狠色伊人亚洲综合成人| 日韩精品一区二区av| 草莓视频性福宝| 全色精品综合影院| 中文字幕亚洲欧美在线不卡| 亚洲最大成人网色| 欧美性suv| 亚洲一区二区三区四区| 17c国产在线| 一道本成人在线| 国产精品一区而去| 亚洲欧美日韩第一页| 99精品视频在线免费观看| 久久精品午夜一区二区福利| 97超碰在线视| 欧美人与性动xxxx| 日本一区二区三区电影免费观看| 国产一区日韩一区| 豆花视频一区二区| 一区二区激情小说| 日本韩国视频一区二区| 99re99| 日韩av手机版| 亚洲大片在线观看| 91成人天堂久久成人| 九九热精品视频在线播放| 国产精品av在线播放| 国产剧情av麻豆香蕉精品| 亚洲偷欧美偷国内偷| 蜜桃福利入口| 蜜桃一级网站.| 亚洲综合色在线| 一区二区三区在线免费视频| 亚洲精品永久免费视频| 影音先锋日韩资源| 国产小视频在线观看| 性折磨bdsm欧美激情另类| 日韩福利电影在线| 视频在线观看一区二区三区| 日韩在线综合| 网站永久看片免费| 欧美视频第二页| 99欧美精品| 成人国产在线| 国产在线拍揄自揄拍无码| 黄色小视频大全| 日韩精品在线观看一区| 国产伦精品一区二区三区精品| 久久久久久久97| 亚洲综合二区| 五月激情六月丁香|