String
- Swift的字符串类型String,跟OC的NSString,在API设计上还是有较大差异
var emptyStr1 = ""
var emptyStr2 = String()
var str: String = "1"
str.append("_2")
str = str + "_3"
str += "_4"
str = "\(str)_5"
print(str.count)
var str = "123456"
print(str.hasPreifx("123"))
print(str.hasSuffix("456"))
var str = "1_2"
str.insert("_", at: str.endIndex)
str.insert(contentsOf: "3_4", at: str.endIndex)
str.insert(contentsOf: "666", at:str.Index(afer: str.startIndex))
str.insert(contentsOf: "888", at:str.Index(afer: str.endIndex))
str.insert(contentsOf: "hello", at:str.Index(str.startIndex, offsetBy: 4))
str.remove(at: str.firstIndex(of: "1")!)
str.removeAll { $@ == "6"}
var range = str.index(str.endIndex, offsetBy: -4)..<str.index(before: str.endIndex)
str removeSubrange(range)
Substring
- String可以通过下标、prefix、suffix等截取子串,子串类型不是String,而是Substring
var str = "1_2_3_4_5"
var substr1 = str.preifx(3)
var substr2 = str.suffix(3)
var range = str.startIndex..<str.index(str.startIndex, offsetBy: 3)
var substr3 = str[range]
print(substr3.base)
var str2 = String(substr3)
- Substring和它的base,共享字符串数据
- Substring发生修改或者转为String时,会重新分配薪的内存存储字符串数据
String与Character
for c in "jack" {
print(c)
}
var str = "jack"
var c = str[str.startIndex]
String相关的协议
- BidirectionalCollection 协议包含的部分内容
- startIndex、endIndex属性、index方法
- String、Array 都遵守了这个协议
- RangeReplaceableCollection协议包含的部分内容
- append、insert、remove 方法
- String、Array 都遵守了这个协议
- Dictionary、Set 也有实现上述协议中的声明的一些方法,只是并没有遵守上述协议
多行String
String与NSString
- String与NSStrjng之间可以随时随时桥接转换
- String不能桥接转换成NSMutableString
- 如果你觉得String的API过于复杂难用,可以考虑将String转为NSString
var str1: String = "jack"
var str2: NSString = "rose"
var str3 = str1 as NSString
var str4 = str2 as String
var str5 = str3.substring(with: NSRange(location: 0, length: 2))
print(str5)
- 比较字符串内容是否等价
- String使用==运算符
- NSString使用isEqual方法,也可以使用==运算符(本质还是调用了isEqual方法)
Swift、OC桥接转换表