介绍
在 Swift 中绝大多数情况下都推荐使用 String 类型,在 Swift3.0 更是取消了 NSString 在 Swift 文件中的代码提示。
特点
-
String是一个结构体,性能比NSString更高; -
String拥有绝大部分NSString的功能; -
String可以直接进行遍历,NSString不支持直接遍历。
字符串的遍历
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo() {
let str = "这是一段测试字符"
for c in str.characters {
print(c)
}
}
输出结果:

字符串遍历展示
获取字符串的长度
- 获取字符串的字节长度
用习惯了override func viewDidLoad() { super.viewDidLoad() demo() } func demo() { let str = "这是一段测试字符" print(str.lengthOfBytes(using: .utf8)) }Objective-C里的length方法初转到Swift会很不习惯。以上代码的意思是通过lengthOfBytes()函数获取字符串在内存中的字节数,.utf8是指定字符串的编码格式。以下为输出结果:
获取字节长度代码输出
utf8编码格式下每个汉字占用三个字节,所以会输出为24。 - 获取字符串字符数的两种方式
1.Swift获取字符串字符数(推荐使用);override func viewDidLoad() { super.viewDidLoad() demo() } func demo() { let str = "这是一段测试字符" print(str.characters.count) }- 使用
NSString中转获取字符串的字符数。
上面代码中的override func viewDidLoad() { super.viewDidLoad() demo() } func demo() { let str = "这是一段测试字符" let ocStr = str as NSString print(ocStr.length) }as表示将前面str做为NSString,类似于Objective-C中的类型强转(NSString *)str,以下为代码输出结果:
获取字符串字符数输出结果 - 使用
字符串的拼接
- 代码示例
以上代码是在override func viewDidLoad() { super.viewDidLoad() demo() } func demo() { let name = "张三" let age = 25 let title : String? = "总裁" print("姓名:\(name)\n年龄:\(age)\n职位:\(title ?? "")") }Swift中常规的字符串拼接方式,格式为:"\(var或者let)再也不需要考虑类似于stringWithFormat这样的语句了。值得注意的是可选项拼接的时候需要解包。
代码的输出结果:
字符串拼接输出结果
限定格式的字符串拼接
- 代码示例
以上代码将数值以时间格式输出,类似于override func viewDidLoad() { super.viewDidLoad() demo() } func demo() { let h = 5 let m = 7 let s = 6 print(String(format:"%02d:%02d:%02d", h, m, s)) }Objective-C中的格式化字符串语句[NSString stringWithFormat:]
代码输出结果:
时间格式代码输出
字符串的子串(截取)
在2.0和3.0时代,Swift有自己截取子字符串的方法,但一直在优化,在4.0更新了以后更是放弃了 Swift 相对繁琐的截取方法,所以在 Swift4.0 时代我们只有通过将 String 字符串转成 NSString 来进行操作
- 代码示例:
上面代码表示定义了一个常量字符串override func viewDidLoad() { super.viewDidLoad() demo() } func demo() { let str = "abcdefg" let ocStr = str as NSString let s1 = ocStr.subString(with: NSMakeRange(2, 3)) print(s1) }“abcdefg”并将这个字符串强转为NSString,接下来的操作就和我们用Objective-C的操作一样了,NSMakeRange(2, 3)表示从第二个字符开始截取三个长度的子字符串。
输出结果:
字符串截取结果输出
Swift3.0的截取方法(已过期但仍可以使用),具体实现方法就不一一做介绍了,有时间会写一篇关于Swift字符串操作的专题。
代码弃用提醒展示
总结
-
Swift中的字符串String是一个结构体; -
String比NSString更加强大,支持直接遍历; -
String比NSString性能更高; -
String不能直接使用length获取字符长度,通过lengthOfBytes()获取到的长度是字符串的所占字节数,如果要用Objective-C的方法操作String需要类型强转,写法为String as NSString; -
String的拼接比NSString更加简便好用,如果拼接复杂型字符串也有相应的函数; -
String的截取推荐转换为NSString来操作,因为Swift4.0取消了字符串截取方法,使用NSString更容易理解。





