Swift 基本语法05-"String"

96
宫城良田__
2017.05.17 22:47* 字数 311
一个iOS开发初级菜鸡.png

Swift 基本语法01-Swift简介
Swift 基本语法02-"let"和"var"
Swift 基本语法03-"if let"和"guard let"
Swift 基本语法04-"switch"和"for"
Swift 基本语法06-数组和字典

1. 字符串简介

1> String是一个结构体,性能更高

  • String目前具有了绝大多数NSString的功能
  • String支持直接遍历

2> NSString是一个OC对象,性能略差

2. 字符串的遍历

let str = "王红庆大帅逼"
for c in str.characters {
    print(c)  // 输出:王,红,庆,大,帅,逼
}

3. 字符串的长度

1> 返回指定编码的对应的字节数量

let str1 = "hello world"
let str2 = "hello world你好"

print(str1.lengthOfBytes(using: .utf8)) // 输出:11
print(str2.lengthOfBytes(using: .utf8)) // 输出:17

2> 返回的字符的个数(推荐使用)

let str = "hello world你好"

print(str.lengthOfBytes(using: .utf8))  // 输出:17
// 返回字符的个数
print(str.characters.count)             // 输出:13

3> 使用as进行类型转换

let str = "hello world你好"

// 经过'as'转换后,ocStr类型变为'NSString'类型
let ocStr = str as NSString
print(ocStr.length)     // 输出:13

4. 字符串的拼接

let name = "王红庆"
let age = 18

let str = "\(name)\(age)"
print(str)              // 输出:王红庆18

5. 带可选项的字符串的拼接

let name = "王红庆"
let age = 18
let title: String? = "iOS开发大菜逼"
    
// 下面这样写会报警告:String interpolation produces a debug description for an optional value; did you mean to make this explicit?
let str = "\(name)\(age)\(title)"
/**
 * 解决'警告'和输出'Optional'的办法
 * 1.对'title'强行解包(这里不推荐不推荐)--->(title!)
 * 2.使用'??'-------------------------->(title ?? "")
 */
let str = "\(name)\(age)\(title!)"      // 输出:王红庆18iOS开发大菜逼
let str = "\(name)\(age)\(title ?? "")" // 输出:王红庆18iOS开发大菜逼
print(str)                              // 输出:王红庆18Optional("iOS开发大菜逼")

6. CGPoint类型的也可以直接拼接,再也不用写NSStringFromCGPoint(point: CGPoint)的方法了

let name = "王红庆"
let point = CGPoint(x: 100, y: 100)
let str = "\(name)\(point)"
print(str)              // 输出:王红庆(100.0, 100.0)

7. 格式化字符串,相当于[NSString stringWithFormat:(NSString *)format]

let h = 8
let m = 9
let s = 7

let dateStr01 = "\(h):\(m):\(s)"
print(dateStr01)            // 输出->8:9:7

let dateStr02 = String(format: "%02d:%02d:%02d", h, m, s)
print(dateStr02)            // 输出->08:09:07

8. 取字符串子串

1> 建议用NSString作为中转,因为Swift取子串的方法一直在优化

let str = "王红庆大帅逼"
let ocStr = str as NSString
let string = ocStr.substring(with: NSMakeRange(2, 4))
print(string)       // 输出:庆大帅逼(从第2个'庆'字往后取4位)

2> swift里从第n位取到最后一位(如果有这种需求,推荐使用这种)

let str = "王红庆大帅逼"
// '阿祖'无实际意义,仅仅是占位用的
let string = str.substring(from: "阿祖".endIndex)
print(string)             // 输出:庆大帅逼

3> swift里取希望得到的字符串(暂时不推荐,还是转成OC字符串易懂一些)

let str = "王红庆大帅逼"
    
guard let range = str.range(of: "红庆") else {
    print("没有找到字符串")            // 如果'str'字符串中没有'红庆',那么就输出:没有找到字符串
    return
}
print(range)
print(str.substring(with: range))   // 输出:红庆
Swift
Web note ad 1