美文网首页
Swift: String 字符串截取封装

Swift: String 字符串截取封装

作者: __Simon__ | 来源:发表于2019-05-15 12:51 被阅读0次

    Swift 中 String 字符串截取需要使用 String.Index 来确定要截取的范围,如下面的例子:

    我要在字符串 alphabet 中截取索引为 3到6(包含6)的子字符串,我需要先构造出 String.Index 类型的起始索引(beginIndex)与结束索引(endIndex)。然后通过起始索引与结束索引构建一个 CloseRange<String.Index> 类型的参数,以下标的形式去获取alphabet 的子字符串。

    let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    let beginIndex = alphabet.index(alphabet.startIndex, offsetBy: 3)
    let endIndex = alphabet.index(alphabet.startIndex, offsetBy: 6)
    let subString = alphabet[beginIndex...endIndex]
    print(subString)
    

    上述的方式虽然完成了我的需求但是,代码过于复杂,我就是为了获取索引为 3到6(包含6)的子字符串,但却写了上面一大堆的代码。理想的方式是我通过数字(Int)索引就可以截取到我想要的子字符串,就像这样 alphabet[3...6]

    为了实现这种快速简单的 String 截取方法,我对 String 类型做了下面的简单扩展。

    extension String {
        subscript(_ indexs: ClosedRange<Int>) -> String {
            let beginIndex = index(startIndex, offsetBy: indexs.lowerBound)
            let endIndex = index(startIndex, offsetBy: indexs.upperBound)
            return String(self[beginIndex...endIndex])
        }
        
        subscript(_ indexs: Range<Int>) -> String {
            let beginIndex = index(startIndex, offsetBy: indexs.lowerBound)
            let endIndex = index(startIndex, offsetBy: indexs.upperBound)
            return String(self[beginIndex..<endIndex])
        }
        
        subscript(_ indexs: PartialRangeThrough<Int>) -> String {
            let endIndex = index(startIndex, offsetBy: indexs.upperBound)
            return String(self[startIndex...endIndex])
        }
        
        subscript(_ indexs: PartialRangeFrom<Int>) -> String {
            let beginIndex = index(startIndex, offsetBy: indexs.lowerBound)
            return String(self[beginIndex..<endIndex])
        }
        
        subscript(_ indexs: PartialRangeUpTo<Int>) -> String {
            let endIndex = index(startIndex, offsetBy: indexs.upperBound)
            return String(self[startIndex..<endIndex])
        }
    }
    
    

    然后就可以使用下面的这种简单的方式截取字符串了

    let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    print(alphabet[..<4])  // ABCD
    print(alphabet[...4])  // ABCDE
    print(alphabet[5..<10]) // FGHIJ
    print(alphabet[5...10]) // FGHIJK
    print(alphabet[11...])  // LMNOPQRSTUVWXYZ
    

    相关文章

      网友评论

          本文标题:Swift: String 字符串截取封装

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