字符串
OC中的字符串是一个对象,继承于NSObject,但是Swift中的字符串是一个结构体,因此Swift中的字符串性能比OC中要高,实际应用举例如下:
var str1 = "zyt"
var str2 = "ssg"
//单纯拼接两个字符串直接加就可以
str1 += str2
//如果两个字符串类型不一致的时候,可以用\()来拼接,如下
let age = 25
let name = "zyt"
//目标 name = zyt ,age = 25
var str = "name = \(name) , age = \(age)"
//如果想要实现例如时间这种显示传入4显示04 04:03:25
var time = String.init(format: "%02d:%02d:%02d", 4,3,25)
字符串的处理必然要提起截取字符串,这在字符串的处理中属于比较常用的,但是Swift在处理截取字符串的时候没有一个很方便的系统api可以调用,所以目前来说,处理截取字符串大体有两种方式
首先第一种:通过转换成OC中的NSString来执行,举例如下:
var aaaa:NSString = "aljdflkasjflkas"//通过定义字符串类型为NSString来调用sub方法,也可这么写:var aaaa = "asldfjalksjf" as NSString 效果一样
let nnn = aaaa.substring(with: NSMakeRange(0, 4))
第二种方式:虽然通过上面那种方式没什么问题,但是总觉得就截一个字符串每次要这么转来转去,感觉总归有点low,因为Swift没有系统封装好这样截取字符串的api,那就自己封装一个吧,代码如下:
//写一个String的类扩展
extension String {
subscript(range: CountableClosedRange<Int>) -> Substring {//闭区间
let sIndex = range.lowerBound
var eIndex = range.upperBound
if sIndex > (count - 1) {
return ""
}else if eIndex > (count - 1) {
eIndex = count - 1
}
let start = index(startIndex, offsetBy: sIndex)
let end = index(startIndex, offsetBy: eIndex)
return self[start...end]
}
subscript(range: CountableRange<Int>) -> Substring {//开区间
let sIndex = range.lowerBound
var eIndex = range.upperBound
if sIndex > (count - 1) {
return ""
}else if eIndex > (count - 1) {
eIndex = count
}
let start = index(startIndex, offsetBy: sIndex)
let end = index(startIndex, offsetBy: eIndex)
return self[start..<end]
}
}
//然后就直接可以调用了,直接传入下标从几到几就可以了
let aaa = "alksdjflkajsf"
aaa[0...3]
aaa[1..<33]
aaa[22...222]//上面的方法已经做处理了,各种情况都能保证不会crash