这篇文章给大家分享一个基于Swift4.0的超便捷字符串截取方法。

文章涉及的代码有些是引用自以前在stackoverflow上看到的几个问题的回答,不过问题包含什么关键词忘了,所以没有在这贴上连接,在此给那些热心回答的朋友们说句抱歉和谢谢。

——原生方法——

Swift的字符串截取并不能直接通过下标设置起始和结尾位置,通常比较繁琐。比如像下面这样子

let str = "Hello, world!"
let index = str.index(str.startIndex, offsetBy: 4)
str[index] // 返回字符 'o'let endIndex = str.index(str.endIndex, offsetBy:-2)
str[index ..< endIndex] // 返回 字符串 "o, worl"String(str.suffix(from: index)) // 返回 字符串 "o, world!"
String(str.prefix(upTo: index)) // 返回 字符串 "Hell"
复制代码

不过仅仅是取不包含结尾的内容还是很方便的

——实现效果——

Int下标来实现字符串截取

let str = "abcdef"
str[1 ..< 3] // 返回 "bc"
str[5] // 返回 "f"
str[80] // 返回 ""
str.substring(fromIndex: 3) // 返回 "def"
str.substring(toIndex: str.length - 2) // 返回 "abcd"
复制代码

——需要复制去用的代码——

通过一个扩展实现

// 下标截取任意位置的便捷方法
extension String {var length: Int {return self.characters.count}subscript (i: Int) -> String {return self[i ..< i + 1]}func substring(fromIndex: Int) -> String {return self[min(fromIndex, length) ..< length]}func substring(toIndex: Int) -> String {return self[0 ..< max(0, toIndex)]}subscript (r: Range<Int>) -> String {let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)), upper: min(length, max(0, r.upperBound))))let start = index(startIndex, offsetBy: range.lowerBound)let end = index(start, offsetBy: range.upperBound - range.lowerBound)return String(self[start ..< end])
}}
//不包含后几个字符串的方法
extension String {func dropLast(_ n: Int = 1) -> String {return String(characters.dropLast(n))}var dropLast: String {return dropLast()}
}
复制代码

·

超好用的Swift 4.0 字符截取快速便捷方法相关推荐

  1. 汇编--查找第一个非0字符的五种方法

    第一种 #include <windows.h> #include <stdio.h>void main(void) {int m = 0, cout = 0;char cSt ...

  2. c51语言转换ASCII码,数据转换:C51数字转字符最快速的方法 ASCII转换

    //字节流转换为十六进制字符串 void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen) { short i; ...

  3. c51语言 字符串转数值,数据转换:C51数字转字符最快速的方法 ASCII转换

    //字节流转换为十六进制字符串 void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen) { short i; ...

  4. ios删除字符串第一位_ios-删除字符串中的最后两个字符(Swift 3.0)

    更新:Xcode 9•Swift 4或更高版本 字符串现在符合RangeReplaceableCollection,因此您可以直接在字符串中使用收集方法dropLast,因此不再需要扩展. 唯一的区别 ...

  5. Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式

    转自:swiftcafe Swift 3.0 更新越来越临近,这次更新会给我们带来很多实用的内容,比如对 Objc 库的迁移,会更符合 Swift 的语法风格.用过之前版本的 Swift,我们会发现很 ...

  6. swift 3.0 再探索 - 1.String

    swift 3.0 - 1.String 最近有空可以学习点新东西,有段时间在学习java和mySQL,转方向没那么快可以做到,眼下iOS 10 和 Xcode8正式版准备上线,swift3.0也标示 ...

  7. [译] Swift 5.0 新特性

    原文地址:What's new in Swift 5.0 原文作者:Paul Hudson 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:iWeslie ...

  8. UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)

    最近一个朋友在做图片处理的 App,想要实现类似 MOLDIV App 拼图的UI效果(如何创建不规则的 view),就问我有什么想法.我首先想到的就是 UIBezierPath+CAShapeLay ...

  9. swift 3.0 json解析、字典转模型三种方案

    swift3.0发布有一段时间了,发现很多朋友在swift3.0json解析上上遇到很多问题,我这边为大家提三种常见的json方案. 1.第一种是自带的字典转模型,自带的需要实现系统的setValue ...

最新文章

  1. UVA 216 Getting in Line
  2. IntelliJ IDEA2016学习小结
  3. sql2005收集作业相关历史记录
  4. c语言tracert程序一直超时,traceroute – tracert命令返回超时
  5. OpenSSL 编程 - RSA 加密解密
  6. Timus1430(裴蜀定理应用)
  7. 【渝粤教育】 广东开放大学 21秋期末考试物业环境与秩序管理10122k2
  8. 【CodeForces - 569A】Music (数学公式化简,模拟追及问题)
  9. android cordova 教程,cordova入门教程(一)
  10. BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
  11. 【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 601期】
  12. 记录虚拟机安装黑苹果
  13. catia二次开发招标_CATIA二次开发
  14. MySQL 幻读被彻底解决了吗?
  15. Git全解 idea github gitee gitlab
  16. carte集群的搭建笔记
  17. 安装pycrypto
  18. 南宁职业技术学院计算机专业宿舍,南宁职业技术学院星级文明宿舍评比办法(试行)...
  19. [环保] 为了反击无耻的两桶油雇来的砖家,三伏天,我一个月开车不开空调测油耗
  20. 拨号上网怎么修改dns服务器,dns怎么设置才能上网 dns设置上网方法【图文】

热门文章

  1. 最新论文解读 | 神经网络“剪枝”的两个方法
  2. 资源 | 李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程,你收集全了吗?
  3. SQL 语法速成手册
  4. 为什么阿里巴巴禁止使用存储过程?
  5. 9种设计模式在Spring中的运用,一定要非常熟练!
  6. 记住:永远不要在 MySQL 中使用 UTF-8
  7. NLP入门必知必会(一):Word Vectors
  8. 我的XGBoost学习经历及动手实践
  9. 南大周志华清华胡事民入围院士候选!计算机领域共计7人
  10. 腾讯宣布员工最高可申请免息借款90万!网友:应届当码农就能一线城市买房了!...