美文网首页码神之路:Object-C篇
swift字符串处理小实贱

swift字符串处理小实贱

作者: 一只特立独行的道哥 | 来源:发表于2016-10-27 14:56 被阅读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
        }
    }
    
    

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

    相关文章

      网友评论

        本文标题:swift字符串处理小实贱

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