《Swift学习笔记》06 - 字符和字符串简介

介绍:Swift 语言由苹果公司在 2014 年推出,用来撰写 Mac OS 和 iOS 应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org
目前Swift已经发展到了第五版本。显然苹果大有推翻 OC “江山”的意思.
今天就来初探一下Swift,看看究竟为何swift有这么大的能力。
参考内容:
Swift中文
YungFan老师

swift
一、 字符串和字符

字符串是一系列的字符的集合,数据类型为string;
字符是一个单一的字符字符串字面量,数据类型为 Character;
String的内容可以通过各种方法来访问到,包括作为 Character值的集合。

for ch in "ShIwEn" {
    print(ch);
}
/*
S
h
I
w
E
n
*/

let str6 = "aBcDeFg"
for (index, value) in str6.enumerated() {
    print("\(index) -- \(value)")
}
0 -- a
1 -- B
2 -- c
3 -- D
4 -- e
5 -- F
6 -- g

String值可以通过传入 Character值的字符串作为实际参数到它的初始化器来构造:

let catCharacters: [Character] = ["C", "a", "t", "!", "️"]
let catString = String(catCharacters)
print(catString)
// prints "Cat!️"

Swift中的每一个字符串 string 都是由 Unicode 字符的独立编码组成,并且提供了多种 Unicode 表示下访问这些字符的支持。
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。(来源于百度知道)

二、定义字符串
  1. 定义不可变字符串
let name = "ShIwEn"
  1. 定义可变字符串
var name2 =  "ShIwEn"
  1. 定义一个空的字符串
var name3: string = string()
var name4 = ""

Swift 会为 name和name2推断类型为 String,因为你用了字符串字面量值来初始化

  1. 定于多行字符串

4.1 通过 """ 来实现多行字符串

// 多行字符串
var str_double =
"""
静夜思
作者:李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
print(str_double)

静夜思
作者:李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。

4.2 当多行字符串字面量里包含了换行
当你的代码中在多行字符串字面量里包含了换行,那个换行符同样会成为字符串里的值。如果你想要使用换行符来让你的代码易读,却不想让换行符成为字符串的值,那就在那些行的末尾使用反斜杠( \ ):

// 当字符串中有转义字符的时候
let annwn = """
本人实习生, \
如果各位老板,公司正好缺ios开发,请联系我.

"最好公司是杭州南京的 \
电话:17855354749."
"""
print(annwn)

4.3 扩展字符串:分隔符# 的使用

//如果字符串声明被 # 号包裹,\ 不需要转义
let str = #"字符串中有\转义字符反斜杠\"#
print(str)
字符串中有 \ 转义字符反斜杠

//假如字符串中有 # 怎么办?用两个#包裹字符串
let str2 = ##"字符串中有#转义字符反斜杠\"##
print(str2)
字符串中有 # 转义字符反斜杠 \ 

如果你需要字符串中某个特殊符号的效果,使用使用匹配你包裹的井号数量的井号并在前面写转义符号 \ 。比如说,如果字符串是 #"Line 1\nLine 2"# 然后你想要让这个字符串输出两行,你可以使用 #"Line 1\#nLine 2"# ,类似地, ###"Line1\###nLine2"### 也会输出两行

三、字符串的常用操作
  1. 拼接字符串
    1.1 通过 + 拼接
let str4 = "abc" + "def"
print(str4)
adcdef

let string1 = "hello"
let string2 = " there"
var instruction = "look over"
instruction += string2

1.2 通过 append 方法实现

// append
var str5 : String = str4.appending("abc")
print(str5)

你不能把 String或者 Character追加到已经存在的 Character变量当中,因为 Character值能且只能包含一个字符

  1. 字符串的长度
    通过 count 方法实现
//长度
let str3 = "1234567"
print(str3.count)
print((str3 as NSString).length)
  1. 字符串插值
    和打印有些类似
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message is "3 times 2.5 is 7.5"
  1. 是否包含某元素
    通过方法 contains
// 含有字符串
let str7 = "abcdefg"
print(str7.contains("cd")) // true
print(str7.contains("a"))  // true
print(str7.contains("o"))  // false
  1. 分割字符串
    通过 components()方法
// 串分割
let str8 = "abcdefg$$aaaaa$bbbbb$ccccc"
let descArr = str8.components(separatedBy: "$$")

for item in descArr {
    print("串分割 item = \(item)")
}
  1. 大小写转换
    lowercased(): 转化为小写
    uppercased():转化为大写
let str6 = "aBcDeFg"
print(str6.lowercased()) // 全部小写
print(str6.uppercased()) // 全部大写
  1. 字符串的替换
    通过replacingOccurrences()方法时间。和OC中的命名都有些类似
let str9 = "abcdefg$$aaaaa$bbbbb$ccccc"
let dest11 = str9.replacingOccurrences(of: "$$", with: "**")
print("\(dest11)")
  1. 字符串索引和子串
    每一个 String值都有相关的索引类型, String.Index,它相当于每个 Character在字符串中的位置。
    使用 startIndex属性来访问 String中第一个 Character的位置。 endIndex属性就是 String中最后一个字符后的位置。所以说, endIndex属性并不是字符串下标脚本的合法实际参数。如果 String为空,则 startIndex与 endIndex相等。

    使用 index(before:) 和 index(after:) 方法来访问给定索引的前后。要访问给定索引更远的索引,你可以使用 index(_:offsetBy:) 方法而不是多次调用这两个方法。
let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G
greeting[greeting.index(before: greeting.endIndex)]
// !
greeting[greeting.index(after: greeting.startIndex)]
// u
let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// a
let str10 = "I Love You"
// 截取某字符串的前5个字符串
let sub1 = str10.prefix(5)
// 截取某字符串的后5个字符串
let sub2 = str10.suffix(5)

// 从某个位置开始
let index = str10.index(str10.endIndex, offsetBy: -5)
let sub3 = str10[index..
  1. 插入和删除字符串 swift5中已经移除
    使用 insert(_:at:)方法,给字符串特定索引位置插入字符。
var str11 = "i am annwn, a code dog"
let index4 = str11.index(str11.startIndex, offsetBy: 2)
str11.insert("q", at: index4)
 
str11.insert(contentsOf: " q", at: welcome.index(before: welcome.endIndex))

使用 remove(at:)方法,从字符串的特定索引位置移除字符:

str11.remove(at: index4)

另外要移除一小段特定范围的字符串,使用 removeSubrange(_:) 方法:

let range = welcome.index(welcome.endIndex, offsetBy: -6)..

你可以在任何遵循了 RangeReplaceableIndexable 协议的类型中使用 insert(_:at:) , insert(contentsOf:at:) , remove(at:) 方法。这包括了这里使用的 String ,同样还有集合类型比如 Array , Dictionary 和 Set 。

字符和字符串就学习这里了

有什么不足的地方欢迎补充。文章大多数内容来自:

Swift中文
YungFan老师
再次感谢!

求职广告:本人实习生,现在急需一份工作,杭州南京合肥的都可以。对我感兴趣的可以私聊我 0.0。谢谢~~~

你可能感兴趣的:(《Swift学习笔记》06 - 字符和字符串简介)