美文网首页
关于String

关于String

作者: 邢罗康 | 来源:发表于2023-05-03 18:33 被阅读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相关协议

  • BidirectionalCollection 协议包含的部分内容:
    • startIndex
    • endIndex 属性
    • index 方法
    • String、Array 都遵守了这个协议
  • RangeReplaceableCollection 协议包含的部分内容:
    • append
    • insert
    • remove方法
    • String、Array都遵守了这个协议
  • Dictionary、Set 也有实现上述协议中声明的一些方法,只是并没有遵守上述协议



六、多行的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)
  • 比较字符串内容是否等价:
    • 如果是String,使用 == 运算符
    • 如果是NSString,使用isEqual方法,也可以使用 == 运算符(本质还是调用了isEqual方法)



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

WechatIMG363.jpeg

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

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



【从OC到Swift】



相关文章

网友评论

      本文标题:关于String

      本文链接:https://www.haomeiwen.com/subject/cvoajdtx.html