swift字符串处理小实贱
2016-10-27 本文已影响12人
一只特立独行的道哥
背景: 最近开始系统的学习swift,发现swift的String类型的操作并没有ObjectC中那么简单。
区别如下:(也许我的见解会有误差,如有不对敬请告知)
--
-
OC中取一个字符串的长度(字符个数,官方说明the individual characters of composed character sequences)可以使用
str.length
就可以了,而swift使用tr.characters.count
-
OC中获取字符串的子串一般使用
substringWithRange:
,substringFromIndex
,substringToIndex
就可以了,而swift中String类型直接是没有对应的方法的
以前都是伸手党,这次认真的学习swift,打算戒掉什么都依赖别人的坏习惯,于是真对上述两点自己写了 String类型的extension,其中包括了获取String字符个数和子串的便捷方法,如果不对,请告知,共同进步
有如下方法:
- 获取字符串的字符个数--也就是长度 : 属性length,可以用OC同样的方式调用
- 根据下标数字获取字符串对应的String.Index :
getIndex(index: Int) -> String.Index
- 根据指定下标和指定的偏移量获取字符串对应的String.Index :
getIndex(index: String.Index, length: Int) -> String.Index
- 根据指定起始下标获取String类型的子字符串 :
getSubString(fromIndex:Int, toIndex:Int) -> String
- 根据开始下标和长度(偏移量)获取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
}
}
写到这儿,不管这些方法实用不实用,心里也很有成就感,按照自己的理解去做,去实现。欢迎批评指正。。。