美文网首页Swift
超好用的Swift 4.0 字符截取快速便捷方法

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

作者: JaiUnChat | 来源:发表于2018-01-21 12:29 被阅读6745次

    这篇文章给大家分享一个基于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 字符截取快速便捷方法

        本文链接:https://www.haomeiwen.com/subject/xbpfaxtx.html