关于String

2023-05-03  本文已影响0人  邢罗康



Swift的字符串类型String,跟OC的NSString,在API设计上还是有较大差异。

一、String的基本使用

// 空字符串
var emptyStr1 = ""
var emptyStr2 = String()

var str: String = "123456"
print(str.hasPrefix("123")) // true
print(str.hasSuffix("456")) // true

var str: String = "1"
str.append("_2") // "1_2"
str = str + "_3" // "1_2_3"
str += "_4" // "1_2_3_4"
str = "\(str)_5" // "1_2_3_4_5"
print("长度:\(str.count)") // 长度9



二、String的插入、删除

比如:var str = "1_2",startIndex代表的就是1(第一位),endIndex代表的就是2(最后一位),如下:

var str = "1_2"

// 1_2_ 默认插入到后面
str.insert("_", at: str.endIndex)

// 1_2_3_4 默认插入到后面
str.insert(contentsOf: "3_4", at: str.endIndex)

// 1666_2_3_4 指定插入到后面
str.insert(contentsOf: "666", at: str.index(after: str.startIndex))

// 1666_2_3_8884 指定插入到前面
str.insert(contentsOf: "888", at: str.index(before: str.endIndex))



三、SubString

String可以通过下标、prefix、suffix等截取子串,子串类型不是String,而是Substring。

var str = "1_2_3_4_5"
var substr1 = str.prefix(3) // 1_2
var substr2 = str.suffix(3) // 4_5

// 1..<4
var range = str.startIndex..<str.index(str.startIndex, offsetBy: 3)
var substr3 = str[range] // 1_2

print(substr3.base) // 最初的String,1_2_3_4_5
var str2 = String(substr3) // Substring -> String

当Substring没发生修改或者转为String时,Substring和它的base共享字符串数据,这时候Substring是浅拷贝。
当Substring发生修改或者转为String时,会分配新的内存存储字符串数据,这时候Substring是深拷贝。如下:


WechatIMG362.jpeg



四、String与Character

for c in "jack" { // c是Character类型
    print(c)
}
    
var str = "jack"
// c是Character类型
var c = str[str.startIndex]



五、String相关协议



六、多行的String

1.多行String使用

let str = """
1
    "2"
3
    '4'
"""
print(str)
1
    "2"
3
    '4'

2.缩进以结尾的三引号为对齐线

let str2 = """
        1
            2
    3
        4
    """
print(str2)
    1
        2
3
    4

3.如果要显示三引号,至少转义一个引号

let string = """
Escaping the first quote \"""
Escaping two quotes \"\""
Escaping all three quotes \"\"\"
"""
print(string)
Escaping the first quote """
Escaping two quotes """
Escaping all three quotes """

4.只有一行的多行String就等于单行String

let str1 = "These are the same."
let str2 = """
These are the same.
"""
print(str1)
print(str2)
These are the same.
These are the same.



七、String与NSString

String 与 NSString 之间可以随时随地桥接转换,如果你觉得String的API过于复杂难用,可以考虑将String转为NSString

var str1: String = "jack"
var str2: NSString = "rose"

var str3 = str1 as NSString
var str4 = str2 as String

// ja
var str5 = str3.substring(with: NSRange(location: 0, length: 2))
print(str5)



八、Swift、OC通过as桥接转换表

WechatIMG363.jpeg

String也可以转换成NSMutableString,但是不是通过as桥接,可以通过⾃带的初始化⽅法转换,如下:

var str = “123456” 
var str2 = NSMutableString(String:str) 



【从OC到Swift】



上一篇 下一篇

猜你喜欢

热点阅读