iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

初入Swift新手村的旅程系列 第 6

Day06 Swift語法( 5 )字串,字元

  • 分享至 

  • xImage
  •  

字串介紹

字串型別就是一串字元的組合,其在開發時可以應用的範圍很多,產品的名稱,歌詞等都需要透過字串來處理。

var str = "Hello, World"

這是簡單的字串的宣告,直接利用型別推斷來進行宣告。

多行字串

字串需要跨越多行的,那就使用多行字符串,由一對三个雙引號包著的。

var quote = """
《IMPORTANT UPDATE》
Gen 2: ESNX, will be delayed until 2022 Q4.
In ESNX, holders can freely choose the components and assemble them. Then, our self-developed system will instantly assemble the 3D model in real time through the on-chain data. Finally, holders will obtain the ESNX robots.
"""
print(quote)

空字串

var str2 = ""

這樣可以宣告一個空字串

但是要注意,在開發時空字串與nil是不同的兩個概念,如果一個Optional可選類型沒有賦值,則為nil,如果有賦值的話,則為空字串,不是nil,在開發時這裡需多留意。

String結構體來構造String 量值

透過構造方式來進行str的變數構造。

str = String()
// 構造空字串
str = String("Hello, World")
// 透過字串構造Hello, World
str = String(123)
// 透過整數構造123
str = String(31.3)
// 透過浮點數構造31.3
str = String(false)
// 透過Bool值構造false
str = String(describing: (1,1,0,true))
// 透過元組構造
str = String(describing: [1,2,3])
// 透過列表構造

構造Int

Swift的String類型提供的方式很多,也可以將其他類型透過構造方法值轉為字串。

var stt = ""
stt = String(describing: Int.self)
// 透過類型構造字串"Int"
print(stt)
// 印出 Int

字串組合

加 + 符號,拼接新的字串

var c1 = "Apple"
var c2 = "Store"
var c3 = c1 + " " + c2
print(c3)
// 印出 Apple Store
中間拼接了一個空格

使用()進行字串差值

var d1 = "Apple \(123)"
print(d1)
// 印出 Apple 123
var d2 = "Store \(stt)"
print(d2)
// 印出 Store Int
var d3 = "Apple \(1 + 3)"
print(d3)
// 印出 Apple 4

字元

字元用來表示單個字元,如數字,英文,符號等,都可以使用字元來進行表示,也可以透過遍歷將字串中的字元分解出來。

Swift使用Character來描述字元類型。

var e: Character = "a"
// 宣告字元
var e2: [Character] = ["H","I"]
// 透過字元陣列來構造字串 HI
var e3 = String(e2)
var e4 = Character("a")
// 透過構造方法宣告字元變數
let name = "NTUE"

for in 遍歷,可以將字串中的字元拆解出來

for character in name {
	print(character)
}
// 依次印出 N T U E

跳脫字元

  • \0 空字符
  • \ 反斜線
  • \t 製表符
  • \n 換行符
  • \r 回車符
  • " 雙引號
  • ' 單引號
  • \u{} 用Unicode來創建字元

字串常用方法

String類型中封裝了許多屬性和方法。

  • isEmpty判斷是否空值
    判斷字串是否為空值
var obj1 = ""
if obj1.isEmpty {
	print("Empty")
}
印出Empty
  • count計數
    獲取字串裡的字元個數,判斷是否為空字串。
if obj1.count == 0 {
	print("Empty")
}
印出Empty
  • 比較判斷
var com1 = "30a"
var com2 = "30b"

比較兩個字串是否相等,只有兩個字串中的所有位置的字元都相等時,才是相等的字串。

if com1 == com2 {
	print("Equal")
}

在比較兩個字串的大小時,會一個一個的對每個字元進行比較,直到遇到不相等的字元為止。

if com1 < com2 {
	print("small")
}
// 印出Small

開發者可以透過下標的方式來訪問字串中的每個字元,獲取字串起始下標與結束下標。

var str = "Hello World"

起始下標

var startIndex = str.startIndex
print(startIndex)
// 印出Index(_rawBits: 1)

結束下標

var endIndex = str.endIndex
print(endIndex)
// 印出Index(_rawBits: 720897)

startIndex與endIndex這兩個變數所獲取到的值為Index類型,不是Int類型,不能直接進行加減運算,而是需要使用下標移動的方法操作。

下標移動

var char = str[str.index(after: startIndex)]
print(char)
// 印出 e
var char2 = str[str.index(before: endIndex)]
print(char2)
// 印出 d

index(after:)方法用來得到當前下標的後一位下標,index(before:)方法用來得到當前下標的前一位下標。

下標範圍

var subString = str[startIndex...str.index(startIndex, offsetBy: 4)]
print(subString)
// 印出 Hello
var subString2 = str[str.index(endIndex, offsetBy: -5)..<endIndex] 
print(subString2)
//印出 World

加上一個字元

str.append(Character("!"))
print(str)
//印出 Hello World!
str.append("Hello World")
print(str)
// 印出Hello World!Hello World

指定位置插入

str.insert("!", at: str.index(str.startIndex, offsetBy: 12))
print(str)
// 印出 Hello World!!Hello World

指定位置替換

str.replaceSubrange(str.startIndex...str.index(str.startIndex, offsetBy: 4), with: "Hi")
print(str)
// 印出 Hi World!!Hello World

指定位置刪除

str.remove(at: str.index(before: str.endIndex))
print(str)
// 印出 Hi World!!Hello Worl

刪除指定範圍

str.removeSubrange(str.startIndex...str.index(str.startIndex,offsetBy: 2))
print(str)
// 印出 World!!Hello Worl

刪除所有字元,此時str = “”
str.removeAll()

下面的兩個方法可以完成大小寫的轉換

var string2 = "My name is andy"
  • 大寫轉換
string2 = string2.uppercased()
print(string2)
// 印出 MY NAME IS ANDY
  • 小寫轉換
string2 = string2.lowercased()
print(string2)
// 印出 my name is andy

下面的兩個方法可以檢查字串中的前綴與後綴。

  • 檢查前綴
string2.hasPrefix("My")
  • 檢查後綴
string2.hasSuffix("andy")

接下來,是陣列的介紹


上一篇
Day05 Swift語法( 4 )元組
下一篇
Day07 Swift語法( 6 )陣列
系列文
初入Swift新手村的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言