Swift傻傻分不清楚系列(五) 字符串和字符

本頁包含內容:

  • 字符串字面量
  • 初始化空字符串
  • 字符串可變性
  • 字符串是值類型
  • 使用字符
  • 連接字符串和字符
  • 字符串插值
  • Unicode
  • 計算字符數量
  • 訪問和修改字符串
  • 比較字符串
  • 字符串的 Unicode 表示形式

String是例如"hello, world","albatross"這樣的有序的Character(字符)類型的值的集合。通過String類型來表示。 一個String的內容可以用許多方式讀取,它包括一個Character值的集合。
創建和操作字符串的語法與 C 語言中字符串操作相似,輕量并且易讀。 字符串連接操作只需要簡單地通過+符號將兩個字符串相連即可。與 Swift 中其他值一樣,能否更改字符串的值,取決于其被定義為常量還是變量。你也可以在字符串內插過程中使用字符串插入常量、變量、字面量表達成更長的字符串,這樣可以很容易的創建自定義的字符串值,進行展示、存儲以及打印。
盡管語法簡易,但String類型是一種快速、現代化的字符串實現。 每一個字符串都是由編碼無關的 Unicode 字符組成,并支持訪問字符的多種 Unicode 表示形式(representations)。

注意:
Swift 的String類型與 Foundation?NSString類進行了無縫橋接。就像?AnyObject類型?中提到的一樣,在使用 Cocoa 中的 Foundation 框架時,您可以將創建的任何字符串的值轉換成NSString,并調用任意的NSString?API。您也可以在任意要求傳入NSString實例作為參數的 API 中用String類型的值代替。 更多關于在 Foundation 和 Cocoa 中使用String的信息請查看?<a rel="nofollow" href="https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/index.html#//apple_ref/doc/uid/TP40014216" "="" style="box-sizing: border-box; color: rgb(45, 133, 202); text-decoration: none; background-color: transparent;">Using Swift with Cocoa and Objective-C (Swift 2.1)

字符串字面量(String Literals)

您可以在您的代碼中包含一段預定義的字符串值作為字符串字面量。字符串字面量是由雙引號 ("") 包裹著的具有固定順序的文本字符集。 字符串字面量可以用于為常量和變量提供初始值:

let someString = "Some string literal value"

注意someString常量通過字符串字面量進行初始化,Swift 會推斷該常量為String類型。

初始化空字符串 (Initializing an Empty String)

要創建一個空字符串作為初始值,可以將空的字符串字面量賦值給變量,也可以初始化一個新的String實例:

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法
// 兩個字符串均為空并等價。

您可以通過檢查其Bool類型的isEmpty屬性來判斷該字符串是否為空:

if emptyString.isEmpty {print("Nothing to see here")
}
// 打印輸出:"Nothing to see here"

字符串可變性 (String Mutability)

您可以通過將一個特定字符串分配給一個變量來對其進行修改,或者分配給一個常量來保證其不會被修改:

var variableString = "Horse"
variableString += " and carriage"
// variableString 現在為 "Horse and carriage"let constantString = "Highlander"
constantString += " and another Highlander"
// 這會報告一個編譯錯誤 (compile-time error) - 常量字符串不可以被修改。

注意: 在 Objective-C 和 Cocoa 中,您需要通過選擇兩個不同的類(NSStringNSMutableString)來指定字符串是否可以被修改。

字符串是值類型(Strings Are Value Types)

Swift 的String類型是值類型。 如果您創建了一個新的字符串,那么當其進行常量、變量賦值操作,或在函數/方法中傳遞時,會進行值拷貝。 任何情況下,都會對已有字符串值創建新副本,并對該新副本進行傳遞或賦值操作。

Swift 默認字符串拷貝的方式保證了在函數/方法中傳遞的是字符串的值。 很明顯無論該值來自于哪里,都是您獨自擁有的。 您可以確信傳遞的字符串不會被修改,除非你自己去修改它。

在實際編譯時,Swift 編譯器會優化字符串的使用,使實際的復制只發生在絕對必要的情況下,這意味著您將字符串作為值類型的同時可以獲得極高的性能。

使用字符(Working with Characters)

您可通過for-in循環來遍歷字符串中的characters屬性來獲取每一個字符的值:

for character in "Dog!".characters {print(character)
}
// D
// o
// g
// !

另外,通過標明一個Character類型并用字符字面量進行賦值,可以建立一個獨立的字符常量或變量:

let exclamationMark: Character = "!"

字符串可以通過傳遞一個值類型為Character的數組作為自變量來初始化:

let catCharacters: [Character] = ["C", "a", "t", "!"]
let catString = String(catCharacters)
print(catString)
// 打印輸出:"Cat!"

連接字符串和字符 (Concatenating Strings and Characters)

字符串可以通過加法運算符(+)相加在一起(或稱“連接”)創建一個新的字符串:

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome 現在等于 "hello there"

您也可以通過加法賦值運算符 (+=) 將一個字符串添加到一個已經存在字符串變量上:

var instruction = "look over"
instruction += string2
// instruction 現在等于 "look over there"

您可以用append()方法將一個字符附加到一個字符串變量的尾部:

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome 現在等于 "hello there!"

注意: 您不能將一個字符串或者字符添加到一個已經存在的字符變量上,因為字符變量只能包含一個字符。

字符串插值 (String Interpolation)

字符串插值是一種構建新字符串的方式,可以在其中包含常量、變量、字面量和表達式。 您插入的字符串字面量的每一項都在以反斜線為前綴的圓括號中:

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message is "3 times 2.5 is 7.5"

在上面的例子中,multiplier作為\(multiplier)被插入到一個字符串常量量中。 當創建字符串執行插值計算時此占位符會被替換為multiplier實際的值。

multiplier的值也作為字符串中后面表達式的一部分。 該表達式計算Double(multiplier) * 2.5的值并將結果 (7.5) 插入到字符串中。 在這個例子中,表達式寫為\(Double(multiplier) * 2.5)并包含在字符串字面量中。

注意:
插值字符串中寫在括號中的表達式不能包含非轉義反斜杠 (\),并且不能包含回車或換行符。不過,插值字符串可以包含其他字面量。

Unicode

Unicode 是一個國際標準,用于文本的編碼和表示。 它使您可以用標準格式表示來自任意語言幾乎所有的字符,并能夠對文本文件或網頁這樣的外部資源中的字符進行讀寫操作。 Swift 的StringCharacter類型是完全兼容 Unicode 標準的。

Unicode 標量(Unicode Scalars)

Swift 的String類型是基于?Unicode 標量?建立的。 Unicode 標量是對應字符或者修飾符的唯一的21位數字,例如U+0061表示小寫的拉丁字母(LATIN SMALL LETTER A)("a"),U+1F425表示小雞表情(FRONT-FACING BABY CHICK) ("

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

錯誤: 找不到或無法加載主類 com.leyou.LeyouItemApplication Process finished with exit code 1...

在IDEA的使用過程中&#xff0c;經常斷掉服務或者重啟服務&#xff0c;最近斷掉服務重啟時突然遇到了一個啟動報錯&#xff1a; 錯誤&#xff1a;找不到或無法加載主類 猜測&#xff1a;1&#xff0c;未能成功編譯&#xff1b; 嘗試&#xff1a;菜單---》Build---》Rebuild Pro…

Ajax — 第二天

Ajax-02 今天內容&#xff1a; 安裝瀏覽器插件 聊天機器人案例 Form表單提交 模板引擎&#xff08;新的概念&#xff0c;難點&#xff09; 兩個案例 Chrome瀏覽器插件安裝 安裝步驟 下載插件的網站&#xff1a; https://www.gugeapps.net/ 無需掃碼 http://www.cnplu…

PC辦公必備軟件

Everything &#xff1a;基于名稱快速定位文件和文件夾https://www.voidtools.com/zh-cn/ Notepad &#xff1a; a free (as in "free speech" and also as in "free beer") source code editor and Notepad replacement that supports several languagesh…

Swift傻傻分不清楚系列(六)集合類型

本頁包含內容&#xff1a; 集合的可變性&#xff08;Mutability of Collections&#xff09;數組&#xff08;Arrays&#xff09;集合&#xff08;Sets&#xff09;字典&#xff08;Dictionaries&#xff09; Swift 語言提供Arrays、Sets和Dictionaries三種基本的集合類型用來…

在.NET Core中使用DispatchProxy“實現”非公開的接口

原文地址&#xff1a;“Implementing” a non-public interface in .NET Core with DispatchProxy 原文作者&#xff1a;Filip W. 譯文地址&#xff1a;https://www.cnblogs.com/lwqlun/p/11575686.html 譯者&#xff1a;Lamond Lu 簡介 反射是.NET中一個非常強大的概念&#x…

Ajax — 評論列表

<body style"padding: 15px;"><!-- 評論面板 --><div class"panel panel-primary"><div class"panel-heading"><h3 class"panel-title">發表評論</h3></div><form class"panel-bod…

VS2013秘鑰

Visual Studio Ultimate 2013 KEY&#xff08;密鑰&#xff09;&#xff1a;BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY&#xff08;密鑰&#xff09;&#xff1a;FBJVC-3CMTX-D8DVP-RTQCT-92494Visual Studio Professional 2013 KEY&#xff08;密鑰&…

Swift傻傻分不清楚系列(七)控制流

本頁包含內容&#xff1a; For-In 循環While 循環條件語句控制轉移語句&#xff08;Control Transfer Statements&#xff09;提前退出檢測 API 可用性 Swift提供了多種流程控制結構&#xff0c;包括可以多次執行任務的while循環&#xff0c;基于特定條件選擇執行不同代碼分支…

java課程之團隊開發沖刺1.8

一.總結昨天進度 1.初步實現用戶交互 增刪課程表 二.遇到的困難 1.主界面一段程序一直報錯 三.今天的任務 1.解決報錯問題&#xff0c; 編寫查詢空教室功能 照片 燃盡圖 轉載于:https://www.cnblogs.com/qfsr/p/10873636.html

Ajax — 聊天機器人演示

<body><div class"wrap"><!-- 頭部 Header 區域 --><div class"header"><h3>小思同學</h3><img src"img/person01.png" alt"icon" /></div><!-- 中間 聊天內容區域 --><div…

uni-app開發微信小程序的幾天時間

人只有在不斷的學習&#xff0c;才能不斷的給自己充電&#xff0c;如果我們停止了學習&#xff0c;就像人沒有了血脈&#xff0c;就會死亡&#xff0c;近來學習比較忙&#xff0c;壓力比較大&#xff0c;整天面對著電腦&#xff0c;敲擊代碼&#xff0c;從中雖然收獲了快樂&…

Swift傻傻分不清楚系列(八)函數

本頁包含內容&#xff1a; 函數定義與調用&#xff08;Defining and Calling Functions&#xff09;函數參數與返回值&#xff08;Function Parameters and Return Values&#xff09;函數參數名稱&#xff08;Function Parameter Names&#xff09;函數類型&#xff08;Funct…

Ajax — 第三天

Ajax-03 模板引擎原理 正則回顧 區分正則方法和字符串方法 正則方法 test()exec() 字符串方法 match()replace()split()search() 正則方法由正則表達式調用&#xff1b;字符串方法由字符串調用&#xff1b; exec方法 功能&#xff1a;使用正則表達式匹配字符串&#xff0c…

d3.js 共享交換平臺demo

今天在群里遇到一張圖 遂來玩一玩&#xff0c;先來上圖!! 點擊相應按鈕&#xff0c;開關線路&#xff0c;此項目的重點是計算相應圖形的位置&#xff0c;由于是個性化項目就沒有封裝布局。好了直接上代碼。 <!DOCTYPE html> <html lang"en"> <head&g…

Java知識系統回顧整理01基礎05控制流程07結束外部循環

一、break是結束當前循環 二、結束當前循環實例 break; 只能結束當前循環 public class HelloWorld { public static void main(String[] args) { //打印單數 for (int i 0; i < 10; i) { for (int j 0; j < 1…

Swift傻傻分不清楚系列(九)閉包

本頁包含內容&#xff1a; 閉包表達式&#xff08;Closure Expressions&#xff09;尾隨閉包&#xff08;Trailing Closures&#xff09;值捕獲&#xff08;Capturing Values&#xff09;閉包是引用類型&#xff08;Closures Are Reference Types&#xff09;非逃逸閉包(Nones…

Ajax — 新聞列表

注意&#xff1a;本項目主要利用到了template&#xff0c;模板引擎進行編寫 模板引擎代碼下載地址 <div id"news-list"><!-- 這里放數據 --></div>.news-item {display: flex;border: 1px solid #eee;width: 700px;padding: 10px;margin-bottom: …

vim下更省心地用中文

在vim下使用中文是個麻煩。除了寫代碼&#xff0c;很多時候也需要做筆記。以下介紹rime輸入法的一個功能&#xff0c;它可以減少vim下中文輸入帶來的麻煩。在***.custom.yaml下添加代碼&#xff1a; "key_binder/bindings": - { when: always, accept: ReleaseEs…

Python 常見的內置模塊

1. abs() 函數 描述 abs() 函數返回數字的絕對值 #!/usr/bin/pythonprint "abs(-45) : ", abs(-45) print "abs(100.12) : ", abs(100.12) print "abs(119L) : ", abs(119L)以上實例運行后輸出結果為&#xff1a;abs(-45) : 45 abs(100.12) : …

Ajax — 第四天

數據交換格式 XML 寫法&#xff1a; 一個文檔有且只有一個根標簽標簽必須閉合屬性值必須加引號 如果說服務器返回的數據是xml格式的 前端需要把服務器返回的xml當做document對象來處理目前無法演示&#xff0c;自己寫接口的時候&#xff0c;我們可以測試一下。 JSON 寫法…