字符串的使用
1.1 問題
Swift的String和Character類型提供了一個快速的,兼容Unicode的方式來處理代碼中的文本信息。創建和操作字符串的語法與C語言中字符串類似。本案例將學習如何操作Swift中的字符串。
1.2 方案
首先初始化字符串,可以直接在代碼中包含一段預定義的字符串作為字符串字面量,字符串字面量是由雙引號引起來的,具有固定順序的文本字符集。
字符串的字面量可以包含以下轉義符:
\0(空字符)、\\(反斜線)、\t(水平制表符)、\n(換行符)、\r(回車符)、\"(雙引號)、\'(單引號)。
初始化以個空字符串可以創建一個空字符串作為初始值,也可以初始化一個新的String實例。
其次遍歷字符串可以使用for-in循環來訪問字符串的每個字符。
然后連接字符串和字符可以通過加法運算或者加法賦值運算來實現,append方法可以將一個字符添加到字符串變量的尾部。
往字符串中插入常量、變量、字面值或者表達式可以使用\()。
可以使用count函數獲取字符串的長度。
最后字符串的其他操作:
比較字符串可以使用雙等號==,結果返回一個布爾值;
可以使用hasPrefix和hasSuffix方法來檢查字符串特定的前綴和后綴;
可以通過字符串的uppercaseString和lowercaseString屬性來訪問字符串的大寫版本和小寫版本。
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:初始化字符串
首先初始化字符串,可以直接在代碼中包含一段預定義的字符串作為字符串字面量,字符串字面量是由雙引號引起來的,具有固定順序的文本字符集。
初始化以個空字符串可以創建一個空字符串作為初始值,也可以初始化一個新的String實例,可以通過isEmpty方法來判斷字符串是否為空,代碼如下所示:
? varemptyString = ""varanotherEmptyString = String() ifemptyString.isEmpty {println("啥也沒有.")} 運行結果如圖-1所示:
圖-1
步驟二:字符串的遍歷
可以使用for-in循環來訪問字符串的每個字符,代碼如下所示:
for character in "Dog" {println(character)} 運行結果如圖-2所示:
圖-2
步驟三:連接字符串和字符
連接字符串和字符可以通過加法運算或者加法賦值運算來實現,append方法可以將一個字符添加到字符串變量的尾部,代碼如下所示:
? let constStr = "常量字符串"varvarString = "變量字符串"varString = constStr + varStringvarString += "再加一個字符串"letch:Character = "!"varString.append(ch) 運行結果如圖-3所示:
圖-3
往字符串中插入常量、變量、字面值或者表達式可以使用\(),代碼如下所示:
? let multiplier = 3let message = "\(multiplier)乘以2.5的結果是\(Double(multiplier)*2.5)" 運行結果如圖-4所示:
圖-4
可以使用count函數獲取字符串的長度,代碼如下所示:
? letnum = count(message) 步驟四:字符串的其他操作
比較字符串可以使用雙等號==,結果返回一個布爾值,代碼如下所示:
? let quotation = "我們是一樣的"let sameQuotation = "我們是一樣的"if quotation == sameQuotation {println("這兩個字符串是一樣的")} 運行結果如圖-5所示:
圖-5
可以使用hasPrefix和hasSuffix方法來檢查字符串特定的前綴和后綴,代碼如下所示:
? lettarena = "tarene"iftarena.hasPrefix("t") {println("這個字符串以t開頭")} 運行結果如圖-6所示:
圖-6
可以通過字符串的uppercaseString和lowercaseString屬性來訪問字符串的大寫版本和小寫版本,代碼如下所示:
? let normal = "Hello World"letshouty = normal.uppercaseStringlet whispered = normal.lowercaseString 運行結果如圖-7所示:
圖-7
1.4 完整代碼
本案例中,完整代碼如下所示:
? importUIKit letstr = "Hello world!"varemptyString = ""varanotherEmptyString = String(); ifemptyString.isEmpty {println("這是空字符串")} for character in "Dog" {println(character)} let constStr = "常量字符串"varvarString = "變量字符串"varString = constStr + varStringvarString += "再加一個字符串"letch:Character = "!"varString.append(ch) let multiplier = 3let message = "\(multiplier)乘以2.5的結果是\(Double(multiplier)*2.5)" letnum = count(message) let quotation = "我們是一樣的"let sameQuotation = "我們是一樣的"if quotation == sameQuotation {println("這兩個字符串是一樣的")} lettarena = "tarene"iftarena.hasPrefix("t") {println("這個字符串以t開頭")} let normal = "Hello World"letshouty = normal.uppercaseStringlet whispered = normal.lowercaseString ?
2 switch語句的使用
2.1 問題
Swift中的switch語句和C語言中的switch語句有很大的不同,本案例將學習如何使用Swift中的switch語句。
2.2 方案
Swift中switch語句的不同:
switch語句必須是完備的,也就是每一種可能的值都必須至少有一個case分支與之對應,在某些不可能涵蓋所有值的情況下,可以使用默認分支default,默認分支必須在switch語句最后;
沒有隱式貫穿,如果需要貫穿則需要使用關鍵字fallthrough;
一個case可以有多個匹配模式;
可以在適當的時候使用break提前結束switch語句。
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:switch語句的基本使用
使用switch語句來匹配一個常量x,代碼如下所示:
let x = 5switch x {case 1:println("x==1")case 2,3,4,5,6,7,8:if x==5 {println("x==5")break}println("x>=2 && x<=8")default:println("default")} 上面的代碼中第二個case匹配多個模式,默認分支保證了switch語句的完備性,運行結果如圖-8所示:
圖-8
步驟二:關鍵字fallthrough的使用
和C語言不同,Swift中的switch語句不存在隱式貫穿,當匹配的case分支中的代碼執行完畢后,程序會終止switch語句,而不會繼續執行下一個case分支。
如果需要貫穿,可以在每個需要該特性的case分支中使用fallthrough關鍵字,代碼如下所示:
letintergerToDescribe = 6var description = "數值\(intergerToDescribe)是"switchintergerToDescribe {case 2,3,5,7,11,13,17,19:description += "一個素數,并且是"fallthroughdefault:description += "一個整數"} 運行結果如圖-9所示:
圖-9
步驟三:case分支中使用范圍
case分支的模式也可以是一個值的區間,下面的例子展示了如何使用區間匹配對應輸出的內容,代碼如下所示:
? let count = 3_000_000_000_000let countedThings = "宇宙中星星的數量"varnaturalCount : String switch count {case 0:naturalCount = "沒有"case 1...9:naturalCount = "極少"case 10...99,100..<500:naturalCount = "少許"case 500...999:naturalCount = "成百上千"case 1000 ..< 1_000_000:naturalCount = "成千上萬"default:naturalCount = "億萬"} 運行結果如圖-10所示:
圖-10
步驟四:數據類型沒有限制
和C語言不同,switch后面的表達式結果的數據類型沒有限制,不僅僅局限于整型,代碼如下所示:
let vegetable = "紅辣椒"switch vegetable {case "芹菜":let vegetableComm = "加點葡萄干伴道螞蟻上樹"case "黃瓜","豆瓣菜":let vegetableComm = "制作三明治"case let x where x.hasSuffix("辣椒"):let vegetableComm = "是很辣很辣的那種\(x)嗎?"default:let vegetableComm = "搞個亂燉算了"} 運行結果如圖-11所示:
圖-11
2.4 完整代碼
本案例中,完整代碼如下所示:
? importUIKit let x = 5switch x {case 1:println("x==1")case 2,3,4,5,6,7,8:if x==5 {println("x==5")break}println("x>=2 && x<=8")default:println("default")}letintergerToDescribe = 6var description = "數值\(intergerToDescribe)是"switchintergerToDescribe {case 2,3,5,7,11,13,17,19:description += "一個素數,并且是"fallthroughdefault:description += "一個整數"} let count = 3_000_000_000_000let countedThings = "宇宙中星星的數量"varnaturalCount : String switch count {case 0:naturalCount = "沒有"case 1...9:naturalCount = "極少"case 10...99,100..<500:naturalCount = "少許"case 500...999:naturalCount = "成百上千"case 1000 ..< 1_000_000:naturalCount = "成千上萬"default:naturalCount = "億萬"} let vegetable = "紅辣椒"switch vegetable {case "芹菜":let vegetableComm = "加點葡萄干伴道螞蟻上樹"case "黃瓜","豆瓣菜":let vegetableComm = "制作三明治"case let x where x.hasSuffix("辣椒"):let vegetableComm = "是很辣很辣的那種\(x)嗎?"default:let vegetableComm = "搞個亂燉算了"} ?
3 元組的使用
3.1 問題
元組是Swift語言中特有的數據類型,它將多個值組合成一個復合值,元組內的值可以是任意類型,并不一定相同,元組在作為函數返回值時非常有用。本案例將學習如何使用元組,包括元組的定義和訪問,元組和switch語句結合使用等。
3.2 方案
元組的定義和訪問:
可以把任意順序的類型組合成一個元組,這個元組可以包含所有類型;
可以將一個元組的內容分解成單獨的常量和變量,以便正常使用,如果只需要一部分元組值可以將需要忽略的部分使用下劃線進行標記;
訪問元組中的元組可以使用下標,下標從零開始;
還可以在定義元組時給每個元素進行命名,這樣就可以通過元素名稱來訪問元組的元素。
元組和switch語句:
可以使用元組在同一個switch語句中測試多個值;
元組中的元素可以是值,也可以是區間;
使用下劃線來匹配所有可能的值;
可以在case分支中進行值綁定;
case分支可以使用where關鍵字來增加額外的判斷條件
3.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:元組的定義和訪問
下面的例子分別使用了不同的方式定義和初始化元組,代碼如下所示:
let http404Errot = (404,"Not Found")letonePerson:(Int ,String,Double) = (001,"Tarena",5000)var http200Status = (200,"OK")var point = (x:0,y:0) 運行結果如圖-12所示:
圖-12
接下來分別使用下標和元素名稱的方式訪問元組的元素,代碼如下所示:
let (status,description) = http404Errotstatusdescriptionlet (statusCode,_) = http200StatusstatusCodevar code = http404Errot.0var describe = http404Errot.1http200Status.0 = 201http200Status.1 = "Unknown"println("\(point.x),\(point.y)")varanotherPerson = (id:002, name:"Guodh", salary:60000.0)anotherPerson.name = "Guodenghong"anotherPerson.salary += 20000.0anotherPerson.0 運行結果如圖-13所示:
圖-13
步驟二:元組和switch語句
下面的例子展示如何使用一個(Int,Int)類型的元組來分類圖-14中的點,switch語句會判斷某個點是否在原點(0,0),是否在紅色的x軸上,是伐在黃的y軸上,以及是否在一個以原點為中心的4*4的矩形里,或者在這個矩形外代碼如下所示:
圖-14
letonePoint = (0,1)switchonePoint {case (0,0):println("在原點")case (_,0):println("在x軸上")case(0,_):println("在y軸上")case(-2...2,-2...2):println("在4*4的矩陣內")default:println("在4*4的矩陣外")} 運行結果如圖-15所示:
圖-15
case分支語句的模式允許將匹配的值綁定到一個臨時的常量或變量,一旦綁定了常量或變量就可以在case分支里面使用,代碼如下所示:
? letanotherPoint = (1,0)switchanotherPoint {case (let x ,0):println("點在x軸上,且x的值為\(x)")case (0,let y):println("點在y軸上,且y的值為\(y)")case let(x,y):println("點不在x軸上也不在y軸上,點的位置為(\(x),\(y))")} 上面代碼中的三個case都聲明了常量x和y,用于臨時獲取元組anotherPoint的一個或兩個值,一旦聲明了這些常量就可以在其對應的case分支里引用,運行結果如圖-16所示:
圖-16
case分支語句可以使用where關鍵字來增加額外額判斷條件,接下來使用switch語句來判斷某個點是否在圖-17中的綠色或紫色的對角線上,代碼如下所示:
圖-17
? letyetAnotherPoint = (1,2)switchyetAnotherPoint {case let(x,y) where x == y:println("(\(x),\(y))在直線x==y上")case let(x,y) where x == -y:println("(\(x),\(y))在直線x==-y上")case let(x,y):println("不在兩條斜線上")} 上面的代碼中三個case都聲明了常量x和y,用于臨時獲取元組yetAnotherPoint的兩個值,這些常量被用作where語句的一部分,僅當where語句的條件為true時,匹配到case分支才被執行,運行結果如圖-18所示:
圖-18
3.4 完整代碼
本案例中,完整代碼如下所示:
? importUIKitlet http404Errot = (404,"Not Found")letonePerson:(Int ,String,Double) = (001,"Tarena",5000)var http200Status = (200,"OK")var point = (x:0,y:0) let (status,description) = http404Errotstatusdescriptionlet (statusCode,_) = http200StatusstatusCodevar code = http404Errot.0var describe = http404Errot.1http200Status.0 = 201http200Status.1 = "Unknown"println("\(point.x),\(point.y)")varanotherPerson = (id:002, name:"Guodh", salary:60000.0)anotherPerson.name = "Guodenghong"anotherPerson.salary += 20000.0anotherPerson.0 letonePoint = (0,1)switchonePoint {case (0,0):println("在原點")case (_,0):println("在x軸上")case(0,_):println("在y軸上")case(-2...2,-2...2):println("在4*4的矩陣內")default:println("在4*4的矩陣外")} letanotherPoint = (1,0)switchanotherPoint {case (let x ,0):println("點在x軸上,且x的值為\(x)")case (0,let y):println("點在y軸上,且y的值為\(y)")case let(x,y):println("點不在x軸上也不在y軸上,點的位置為(\(x),\(y))")} letyetAnotherPoint = (1,2)switchyetAnotherPoint {case let(x,y) where x == y:println("(\(x),\(y))在直線x==y上")case let(x,y) where x == -y:println("(\(x),\(y))在直線x==-y上")case let(x,y):println("不在兩條斜線上")} ?
轉載于:https://www.cnblogs.com/52190112cn/p/5052146.html
總結
以上是生活随笔為你收集整理的Swift基础语法 、 元组(Tuple)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。