当前位置: 首页 > article >正文

Swift 如何打造兼容新老系统的字符串分割(split)方法

在这里插入图片描述

0. 概览

在 Swift 的开发中,我们经常要与字符串打交道。其中一个常见的操作就是用特定的“分隔符”来分割字符串,这里分隔符可能不仅仅是字符,而是多字符组成的字符串。

从 iOS 16 开始, 新增了对应的方法来专注此事。不过,对于 iOS 16 之前的系统我们又该何去何从呢?

在本篇博文中您将学到以下内容:

  • 0. 概览
  • 1. 分割字符串,轻而易举?
  • 2. iOS 16 之前的一种解决
  • 3. 我们的小目标:兼容所有 iOS!
  • 4. iOS 16 之前对于 URL 特殊字符串组件分隔的解决
  • 5. 字符串分割一个实际应用
  • 总结

相信学完本篇后,小伙伴们对字符串分割的实现又会有更多的理解。

那还等什么呢?Let‘s split it!!!😉


1. 分割字符串,轻而易举?

从 iOS 16 开始  为集合(Collection)新增了一个 split 方法,它可以用和集合元素同样类型的“分隔符”来分割集合本身:

在这里插入图片描述

字符串也算一个集合,所以对于用字符串来分割字符串来说这真是恰到好处:

let string = "Hello||World||Dear||hopy!!!"
let parts = string.split(separator: "||")

在这里插入图片描述


注意,这里讨论的是用字符串来分割字符串,请不要将其和用字符来分割字符串相混淆,因为后者是 String 本身的方法,而且已经存在很久了:

在这里插入图片描述


看来从 iOS 16+ 开始用字符串分割字符串简直是轻而易举,不过 iOS 16 之前怎么办呢?

2. iOS 16 之前的一种解决

在 iOS 16 之前的系统中,我们可以借助 Objc 语言中 NSString 的神奇力量来达到同样的目的:

let string = "Hello||World||Dear||hopy!!!"
let parts = (string as NSString).components(separatedBy: "||")

在这里插入图片描述

如上代码所示,我们利用 String 底层桥接 NSString 的 components() 方法做到了同样的事。

3. 我们的小目标:兼容所有 iOS!

为了能够在所有 iOS 上都实现字符串分割字符串的功能,我们有必要将上面两种方法合并成为一个新的方法:

extension String {
    public func splitBy(separator: String) -> [String] {
        if #available(iOS 16.0, *) {
            return split(separator: separator).map(String.init)
        } else {
            return (self as NSString).components(separatedBy: separator)
        }
    }
}

现在无论在何种版本的系统中,我们都可以直接游刃有余的调用这个新方法了:

在这里插入图片描述

4. iOS 16 之前对于 URL 特殊字符串组件分隔的解决

如果我们要分割的是特殊类型的字符串,比如将表示 URL 链接的字符串分割成 各个 URL 组成部分,我们还可以使用老朋友 NSString 的 pathComponents() 方法来完成此事:

在这里插入图片描述

5. 字符串分割一个实际应用

在从网页中解析图片时,往往会取得下面这种形式的图片地址:

https://www.bilibili.com//s1.hdslb.com/bfs/static/jinkela/video/asserts/oldfanIcon.svg

注意,它其中包含两个 “//” 。此时,图片实际的地址应该为:

https://s1.hdslb.com/bfs/static/jinkela/video/asserts/oldfanIcon.svg

我们可以利用上面的字符串分割技术来轻松修正这种类型的图片地址:

enum ImageParser {
    // 将 https://1.com//2.com/x/a.png 形式的 URL 修正为 https://2.com/x/a.png
    static func fixMultipleDoubleSlash(_ urlString: String) -> String {
        var parts = urlString.splitBy(separator: "//")
        if parts.count > 2 {
            _ = parts.remove(at: 1)
            return parts.joined(separator: "//")
        }
        return urlString
    }
}

我们可以这样调用它:

let urlString = "https://www.bilibili.com//s1.hdslb.com/bfs/static/jinkela/video/asserts/oldfanIcon.svg"

let fixedUrlString = ImageParser.fixMultipleDoubleSlash(urlString)

它的运行结果如下:

在这里插入图片描述

最后,让我们看一下此项技术在 App 中的实际应用:

在这里插入图片描述

小伙伴们从上面 App 的演示中可以看到,我们利用字符串分割技术成功解析出了原先无法解析的图片,并将它们显示出来。棒棒哒!💯

总结

在本篇博文中,我们讨论了在 iOS 16 之前和之后如何实现字符串分割字符串的功能,并用把它应用到了实际的例子中。

感谢观赏,再会!😎


http://www.kler.cn/a/133069.html

相关文章:

  • Neo4j Desktop 和 Neo4j Community Edition 区别
  • mindspore发布件
  • L11.【LeetCode笔记】有效的括号
  • 【Linux系统编程】第四十六弹---线程同步与生产消费模型深度解析
  • Git_2024/11/16
  • 深入探索 Kubernetes 安全容器:Kata Containers 与 gVisor
  • <C++>类和对象下|初始化列表|explicit static|友元|内部类|匿名对象|构造函数的优化
  • vue-组件通信(二)
  • DHCP协议详解
  • 竞赛选题 疫情数据分析与3D可视化 - python 大数据
  • 机器学习笔记 - Ocr识别中的文本检测EAST网络概述
  • 机器视觉工程师吐槽的常见100个名场面
  • excel导入 Easy Excel
  • Android SdkManager简介
  • 网站优化工具Google Optimize
  • 微机原理_12
  • 比亚迪刀片电池与特斯拉4680电池比较
  • C语言循环结构 for循环
  • 若依框架数据源切换为pg库
  • 2311ddip1000不能从函数返回域引用
  • 牛客——OR36 链表的回文结构(C语言,配图,快慢指针)
  • quickapp_快应用_tabBar
  • rocketmq 安装dashboard1.0.0 mq消息控制台安装 rocketmq控制台安装 rocketmq-dashboard-1.0.0编译安装
  • mysql使用--表达式和函数
  • ClickHouse 语法优化规则
  • LabVIEW编程开发NI-USRP