Swift学习笔记六:字符串 String
- 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))
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥