当前位置: > > > Swift - 扩展String增加字符串截取方法subString(start:, length:)

Swift - 扩展String增加字符串截取方法subString(start:, length:)

(本文代码已升级至Swift4)

Swift 开发时,通过 String substring 可以实现字符串的截取,不过由于其参数类型是 String.IndexRange,有时使用起来会比较麻烦。 

1,扩展String

这里对 String 进行扩展,新增一个 subString 方法。直接可以根据起始位置(Int 类型)和需要的长度(Int 类型),来截取出子字符串。
extension String {
    //根据开始位置和长度截取字符串
    func subString(start:Int, length:Int = -1) -> String {
        var len = length
        if len == -1 {
            len = self.count - start
        }
        let st = self.index(startIndex, offsetBy:start)
        let en = self.index(st, offsetBy:len)
        return String(self[st ..< en])
    }
}

2,使用样例

let str1 = "欢迎访问hangge.com"
let str2 = str1.subString(start: 4, length: 6)
print("原字符串:\(str1)")
print("截取出的字符串:\(str2)")
运行结果如下:
评论4
  • 4楼
    2017-12-30 22:18
    PINGZISAMA

    谢谢hang歌!

    站长回复

    不客气。

  • 3楼
    2017-12-06 17:25
    66

    航哥V5

    站长回复

    多谢夸奖。

  • 2楼
    2017-11-01 15:18
    Aida

    航哥,你好,swift4里面self.count跟self.characters.count有区别吗,self是字符串

    站长回复

    过去取字符数要通过self.characters.count来获取,而且碰到表情符号还会有bug。现在直接使用self.count就好了。之前文章有些代码忘记同步修改了,现已更新。

  • 1楼
    2017-09-19 11:33
    ZREO1111111111

    let en = characters.index(st, offsetBy:len)
    这句代码报错了

    fatal error: cannot increment beyond endIndex (lldb)

    站长回复

    我测试了下没问题啊,你是不是参数超过字符串的范围了。