常用的扩展
// 字符串类扩展
extension String {
/// 获取字符串绘制的高度
///
/// - parameter font : 要绘制的字体,将会影响行高等
/// - parameter width : 绘制的宽度
/// - returns : 字符串绘制的最大高度
func getMaxHeight(font:UIFont,width:CGFloat) -> CGFloat {
// 获取最大的
let s = CGSize(width: width,height: CGFloat(MAXFLOAT))
return getMaxHeight(font: font,rangeRect: s)
}
/// 获取字符串绘制的高度
///
/// - parameter font : 要绘制的字体,将会影响行高等
/// - parameter rangeRect : 绘制的最大范围,类似于最大的画布
/// - returns : 字符串绘制的最大高度
func getMaxHeight(font:UIFont,rangeRect rect:CGSize) -> CGFloat {
// draw option
let opt:NSStringDrawingOptions = [NSStringDrawingOptions.truncatesLastVisibleLine,NSStringDrawingOptions.usesFontLeading,NSStringDrawingOptions.usesLineFragmentOrigin]
// str
let str = NSString(string: self)
// max size
let maxSize = rect
// font
let attr:[String:Any] = [NSFontAttributeName:font]
// 计算出来的范围
let resultRect = str.boundingRect(with: maxSize,options: opt,attributes: attr,context: nil)
// 返回高度
return CGFloat(ceil(Double(resultRect.height)))
}
/** 获取字符串的单行宽度,有可能会超过屏幕限制 - parameter font : 要绘制的字体 */
func getMaxWidth(font:UIFont) -> CGFloat {
let opt:NSStringDrawingOptions = [NSStringDrawingOptions.truncatesLastVisibleLine,NSStringDrawingOptions.usesLineFragmentOrigin]
// str
let str = NSString(string: self)
// max size
let maxSize = CGSize(width: CGFloat(MAXFLOAT),height: CGFloat(MAXFLOAT))
// font
let attr:[String:Any] = [NSFontAttributeName:font]
// 计算出来的范围
let resultRect = str.boundingRect(with: maxSize,context: nil)
// 返回高度
return CGFloat(ceil(Double(resultRect.width)))
}
/** 去除左右的空格和换行符 */
func trim() -> String {
return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
}
/** 将字符串通过特定的字符串拆分为字符串数组 - parameter str : 拆分数组使用的字符串 - returns : 字符串数组 */
func split(string:String) -> [String] {
return NSString(string: self).components(separatedBy: string)
}
/** 拆分字符串,并获取指定索引的字符串 - parameter splitStr : 拆分数组使用的字符串 - parameter index : 索引位置 - parameter defaultStr : 默认字符串 - returns : 拆分所得字符串 */
func strSplitByIndex(splitStr str:String,index:Int,defaultStr:String = "") -> String {
let a = self.split(string:str)
if index > a.count - 1 {
return defaultStr
}
return a[index]
}
/** 字符串替换 - parameter of : 被替换的字符串 - parameter with : 替换使用的字符串 - returns : 替换后的字符串 */
func replace(of: String,with: String) -> String {
return self.replacingOccurrences(of: of,with: with)
}
/** 判断是否包含,虽然系统提供了方法,这里也只是简单的封装。如果swift再次升级的话,就知道现在做的好处了 - parameter string : 是否包含的字符串 - returns : 是否包含 */
func has(string:String) -> Bool {
return self.contains(string)
}
/** 字符出现的位置 - parameter string : 字符串 - returns : 字符串出现的位置 */
func indexOf(string str:String) -> Int {
var i = -1
if let r = range(of: str) {
if !r.isEmpty {
i = characters.distance(from: self.startIndex,to: r.lowerBound)
}
}
return i
}
/** 这个太经典了,获取指定位置和大小的字符串 - parameter start : 起始位置 - parameter length : 长度 - returns : 字符串 */
func subString(start:Int,length:Int = -1) -> String {
var len = length
if len == -1 {
len = characters.count - start
}
let st = characters.index(self.startIndex,offsetBy:start)
let en = characters.index(st,offsetBy:len)
let range = st ..< en
return self.substring(with:range)
}
/// 字符串的长度
var length:Int {
get {
return self.characters.count
}
}
/// 将16进制字符串转为Int
var hexInt:Int {
get {
return Int(self,radix: 16) ?? 0
}
}
}