-
使用“ """ ”创建多行字符串
-
使用超过下方引号前空格数的空格缩进
-
使用string.isEmpty判断字符串是否为空
-
使用let和var区别是否可变
这里只是单纯的是否可变,区别与oc中NSString与NSMutableString是否可变的复杂机制。 -
可以使用string()创建
-
swift中string是值类型,不同于Oc中string作为特殊的对象类型,会自动进行值拷贝(所谓的值拷贝就是将a的值赋予b之后改变b的值不会影响到a,这是值类型的特征,不同于对象类型储存于同一内存改变其中一个会影响另一个,详情写在oc的基本知识里)
-
可以使用forin遍历string中的characters
-
可以使用字符数组作为参数构件字符
let catCharacters:[Character] = ["C","a","t","!","🐱"] let cat = String(catCharacters)
-
多行字符串相加时后者第一行会加在前者最后一行后(前者需手动留空白行)。
-
使用\()在字符串中加入变量
-
由于不同类型的字符编码位数不同造成大小不同,所以 string 中的 index 不能用 int 类型。只能用如下方式:
let greeting = "Guten Tag!" greeting[greeting.startIndex] // G greeting[greeting.index(before: greeting.endIndex)] // ! greeting[greeting.index(after: greeting.startIndex)] // u let index = greeting.index(greeting.startIndex, offsetBy: 7) greeting[index] // a
-
endIndex 为最后一个字符串结尾的位置,所以访问字符串最后一个字符用
brefore:endIndex
,否则如下:greeting[greeting.endIndex] // Error greeting.index(after: greeting.endIndex) // Error
-
使用 indices 属性遍历字符串中所有字符
for index in greeting.indices { print("\(greeting[index]) ", terminator: "") } // Prints "G u t e n T a g ! "
-
index(before:)
,index(after:)
, 以及index(_:offsetBy:)
可以用于所有遵循 Collection 协议的类型,包括 String,Array,Dictionary,Set。 -
使用string.insert和string.remove插入和删除character
var welcome = "hello" welcome.insert("!", at: welcome.endIndex) welcome.insert(contentsOf: " there", at: welcome.index(before:welcome.endIndex)) welcome.remove(at: welcome.index(before: welcome.endIndex)) let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex welcome.removeSubrange(range)
-
insert和remove可以用于任何遵守RangeReplaceableCollection协议的对象,包括String,Array,Dictionary,and Set。
-
SubString 为截取 String 形成的子字符串,类似于 String,有着几乎通用的方法(都遵循
StringProtocol
协议)。不过 SubString 只能作为临时变量,不能存储,需要转为 String 。let greeting = "Hello, world!" //特别的index类型 let index = greeting.firstIndex(of: ",") ?? greeting.endIndex //以string作为character数组,并在[]中传入index列表截取字符串 let beginning = greeting[..<index] // beginning is "Hello" // Convert the result to a String for long-term storage. let newString = String(beginning)
原理:
SubString 实际上是重用相对应 String 中的部分内存,所以如果 SubString 长期占用其内存,相应的源 String也需要长期存在不能被释放。故此 SubString 不能长期存储(substrings aren’t suitable for long-term storage) -
使用
==
和!=
判断两个字符串是否一致。使用hasPrefix
判断是否以某一字符串开头,使用hasSuffix
判断是否以某一字符串结尾。 -
utf8和utf16可以用一位表示某些字符,但是例如🐶,可能需要多个。而Unicode Scalar使用12bit,可以用一位表示各种字符。
网友评论