码神之路:Object-C篇

swift字符串处理小实贱

2016-10-27  本文已影响12人  一只特立独行的道哥

背景: 最近开始系统的学习swift,发现swift的String类型的操作并没有ObjectC中那么简单。

区别如下:(也许我的见解会有误差,如有不对敬请告知)

--

  1. OC中取一个字符串的长度(字符个数,官方说明the individual characters of composed character sequences)可以使用 str.length就可以了,而swift使用 tr.characters.count

  2. OC中获取字符串的子串一般使用 substringWithRange:substringFromIndex,substringToIndex 就可以了,而swift中String类型直接是没有对应的方法的

以前都是伸手党,这次认真的学习swift,打算戒掉什么都依赖别人的坏习惯,于是真对上述两点自己写了 String类型的extension,其中包括了获取String字符个数和子串的便捷方法,如果不对,请告知,共同进步

有如下方法:

  1. 获取字符串的字符个数--也就是长度 : 属性length,可以用OC同样的方式调用
  2. 根据下标数字获取字符串对应的String.Index : getIndex(index: Int) -> String.Index
  3. 根据指定下标和指定的偏移量获取字符串对应的String.Index : getIndex(index: String.Index, length: Int) -> String.Index
  4. 根据指定起始下标获取String类型的子字符串 : getSubString(fromIndex:Int, toIndex:Int) -> String
  5. 根据开始下标和长度(偏移量)获取String的子字符串 : getSubString(fromIndex:Int,length:Int) -> String

代码如下:

extension String{
    
    /// 获取字符串的字符个数--也就是长度
    var length : Int {
        get{
            return self.lengthOfBytes(using: String.Encoding.utf8)
//            return self.characters.count
        }
    }

    
    /// 根据下标数字获取字符串对应的String.Index
    ///
    /// - parameter index: 字符串数值下标
    ///
    /// - returns: String.Index
    func getIndex(index: Int) -> String.Index {
        return self.index(self.startIndex, offsetBy: index , limitedBy: self.endIndex) ??  self.endIndex
    }
    
    
    /// 根据指定下标和指定的偏移量获取字符串对应的String.Index
    ///
    /// - parameter index:  指定的String.Index
    /// - parameter length:
    ///
    /// - returns: 偏移量
    func getIndex(index: String.Index, length: Int) -> String.Index {
        return self.index(index, offsetBy: length, limitedBy: self.endIndex) ??  self.endIndex
    }
    
    
    /// 根据指定起始下标获取String类型的子字符串
    ///
    /// - parameter fromIndex: 开始下标
    /// - parameter toIndex:   结束下标
    ///
    /// - returns: 对应的字符串
    func getSubString(fromIndex:Int, toIndex:Int) -> String {
        
        var str: String = ""
        let si = self.getIndex(index: fromIndex)
        let ti = self.getIndex(index: toIndex)
        for index in self.characters.indices {
            
            if index >= si && index <= ti {
                str.append(self[index])
            }
            
            
        }
        return str
    }
    
    
    /// 根据开始下标和长度(偏移量)获取String的子字符串
    ///
    /// - parameter fromIndex: 开始下标
    /// - parameter length:    所取长度
    ///
    /// - returns: 子字符串
    func getSubString(fromIndex:Int,length:Int) -> String {
        
        var str: String = ""
        let si = self.getIndex(index: fromIndex)
        let ti = self.getIndex(index: si, length:length)
        for index in self.characters.indices {
            
            if index >= si && index <= ti {
                str.append(self[index])
            }
            
            
        }
        return str
    }
}

写到这儿,不管这些方法实用不实用,心里也很有成就感,按照自己的理解去做,去实现。欢迎批评指正。。。

上一篇下一篇

猜你喜欢

热点阅读