- String 是一个结构体,性能更高
- 目前具有了绝大多数 NSString 的功能
- String 支持直接遍历
- NSString 是一个 OC 对象,性能更差
- 遍历字符串中的字符
var str = “Hello world" for s in str.characters { print(s) }
- 字符串的长度
var str = “Hello world你好" // 返回以字节为单位的字符串长度,一个中文占 3 个字节 17 let len1 = str.lengthOfBytesUsingEncoding(using: .utf8) // 返回实际字符的个数 13 let len2 = str.characters.count // 使用 NSString 跳转 // Swift 中可以使用 值 as 类型 来进行类型强转 // Swift 中, 除 String 之外, 绝大多数使用 as 需要 ? / ! // as! / as? 直接根据前面返回的值来决定 // 注意: if let / if guard 判空语句, 一律使用 as? let ocStr = str as NSString print(ocStr.length)
- 字符串的拼接:直接在 “” 中使用 (变量名) 的方式可以快速拼接字符串
let str1 = "Hello" let str2 = "World" let i = 32 str = "(i) 个 " + str1 + " " + str2
- 可选项的拼接
- 如果变量是可选项,拼接的结果中会有 Optional
- 为了应对强行解包存在的风险,苹果提供了 ?? 操作符
- ?? 操作符用于检测可选项是否为 nil
- 如果不是 nil,使用当前值
- 如果是 nil,使用后面的值替代
let str1 = "Hello" let str2 = "World" let i: Int? = 32 str = "(i ?? 0) 个 " + str1 + " " + str2
- 格式化字符串
- 在实际开发中,如果需要指定字符串格式,可以使用 String(format:...) 的方式
let h = 8 let m = 23 let s = 9 let timeString = String(format: "%02d:%02d:%02d", arguments: [h, m, s]) let timeStr = String(format: "%02d:%02d:%02d", h, m, s)
- String 与 Range 的结合
- 要 Swift 中, String 和 Range 连用时,语法结构比较复杂
- 如果不习惯 Swift 的语法,可以将字符串转换成 NSString 再处理
let helloString = "我们一起飞" (helloString as NSString).substringWithRange(NSMakeRange(2, 3))
-
- 使用 Range 的写法 --- 字符串的子串
// 建议:一般使用 NSString 作为中转,因为 Swift 取子串的方法一直在优化 let str = “我们一起去飞" // 1. NSString let ocStr = str as NSString let s1 = ocStr.substring(with: NSMakeRange(2, 3)) print(s1) // 2. String 的方法 let s2 = str.substring(from: “我们”.endIndex) print(s2) let s3 = str.substring(from: “abc”.endIndex) print(s3) // 取子串的范围 guard let range = str.range(of: “一起”) else { print(“没有找到字符串") return } // 一定找到的范围 print(range) print(str.substring(with: range))