Swift学习笔记

目录

一.字符与字符串

1.1 字符

1.2 字符串

1.2.1 字符串的引入

1.2.2 字符串中的转义符

 1.2.3 字符串的比较

1.2.4 字符串的大小写转换

1.2.5 字符串的截取和替换

1.2.6 遍历字符串中的字符

二.循环

2.1 for循环 

2.2 while循环语句

2.3 repeat-while 循环语句

三.数组

3.1 数组的定义

3.1.1 数组的创建

3.1.2 数组的访问和查找

3.1.3 数组的编辑

3.1.4 数组的排序

3.2 多维数组

四.Swift UI学习


一.字符与字符串

1.1 字符

Swift中的字符与Objective-C有些不同,每一个字符代表一个可拓展的字母集,可拓展的字母集由若干个(大于等于一个)Unicode标量值表示,这些标量构成了一个可拓展的字母集,也就是一个人类可读的字符。

let sun = "\u{2600}"
// "☀"
let snow = "\u{2744}"
// "❄"

你可以将字符拼接为字符串。

let sunAndSnow = "\u{2600}\u{2744}"
// "☀❄"

字符拼接后,将以字符串的形式存在,所以下面的代码是错误的:

let sunAndSnow:Character = "\u{2600}\u{2744}"

1.2 字符串

Swift中的字符串由若干个字符构成,并且和Objective-C中的字符串不太一样。在Swift 语言
中,你可以使用两种方式定义一个字符串:

var emptyString1 = ""
var emptyString2 = String()

在第一行代码中,通过给变量设置一个初始值创建了一个内容为空的字符串。在第二行代码中,则创建了一个 String 的实例。

使用字符串的isEmpty 属性可以检查一个字符串是否为空字符串: 

var name = ""
name.isEmpty    // true

1.2.1 字符串的引入

在 Objective-C 中,你可以使用 stringWithFormat 方法和%@符号相结合的方式在一个字符串中引入其他字符串。在Swift 中引入其他字符串更加简单,可以使用\()以引入其他字符串。

let 数学 = 95
let 语文 = 90
let 成绩 = "你的语文成绩是\(数学),语文成绩是\(语文)"

除了使用\()引入其他字符串外,还可以使用 + 号,例如: 

let firstName = "Jerry"
let secondName = "Lee"
let FullName = firstName + " " + "Lee"     //结果为:Jerry Lee

Swift 还提供了几种非常实用的字符串拼接的快捷方法:append()、insert()和 append(),通过下面的实例可以认识它们的使用方法和具体功能: 

var hello = "Hello, swift"
let ganTanHao:Character = "!"
hello.append(ganTanHao)      // Hello, swift!
hello.insert(ganTanHao, at: hello.endIndex)     // Hello, swift!!
hello, append (" Great Language!")     // Hello, swift!! Great Language!

1.2.2 字符串中的转义符

字符串的操作非常普遍,我们会在字符串中经常发现如\n之类的转义字符。下表列出了一些常用的转义字符和用途。

41712b6da1fd47489f69470efb6c1b66.png

 1.2.3 字符串的比较

在实际开发工作中,经常需要进行字符串的比较。例如,判断用户输入的登录密码是否与数据库保存的注册密码一致。对字符串的比较可以直接使用 == 符号:

let passwordFromUser = "123456"
let passwordFromDb = "123456"
if(passwordFromUser == passwordFromDb)
{
   print("你可以登陆系统了。")
}

如果只需判断字符申的前部分和后部分是否与另一个字符串相同,可以使用 hasPrefix()方法和hasSuffix()方法,分别用来判断一个字符串的前面或后面是否包含某个字符串: 

let userTypel = "京东的金牌商家"
let userType2 = "淘宝的金牌买家"
print(userTypel.hasPrefix("京东”))       // true
print(userType2,hasSuffix("买家"))       // true

1.2.4 字符串的大小写转换

可以使用 uppercased()和 lowercased()方法进行英文字符串的大小写转换。

let hello = "Hello, swift"
print(hello.uppercased())    // HELLO,SWIFT
print(hello.lowercased())    // hello,swift
print(hello.capitalized)     // Hello,Swift

1.2.5 字符串的截取和替换

在实际工作中,我们会经常在字符串中查找特定的内容,或者使用另一个字符串替换源字符串中指定的内容。Swift 为字符串提供了很多相关的方法,以方便开发者的工作。

var hello = "Hello, Swift! "
hello.substring(from: hello.index(hello.startIndex, offsetBy: 7))     //Swift!
hello.substring(to: hello.index(hello.endIndex, offsetBy.-8))            //Hello
hello.replacingOccurrences(of: "Hello", with: "Hi")                      //Hi, Swift!
hello remove(at: hello.index(hello.startIndex, offsetBy: 5))             //,
print(hello)                                                             //Hello Swift!

在第2行代码中,使用 substring (from: Index, offsetBy)方法获得从第1个字符开始至指定位置的字符串。其中参数为 Index 类型。这里使用 offsetBy 参数,以字符串的 startlndex 位置右移7位为起点进行字符串的截取。
在第3行代码中,使用substring (to: Index, offsetBy)方法,从字符串的结束点开始截取至字符串结束点坐标左移8个字符后的位置。
在第4行代码中,使用 replacingOccurrences (of, with)方法将字符串中的hello字符替换为Hi。
第5行代码中的 remove(at, offsetBy)方法可以删除字符串指定位置上的字符。 

1.2.6 遍历字符串中的字符

既然字符串是由一个个字符组合而成的,即字符串是字符的集合,那么就可以对字符串进行遍历、查找和打印字符串中的每个字符。例如将在下面的代码中介绍如何查找手机号码中某个数字出现的次数。

var num = 0
let hello = "15011123451"
for temp   in hello.characters
{
    if temp == "1"
    {
       num += 1
    }
}
print(num)         //结果为5

二.循环

2.1 for循环 

Swift的for循环语句可以用来重复执行一系列语句,直到达成特定的条件。
Swif 提供了两种 for 循环语句,一种是C语言风格的 for 循环:条件递增,这里讲解 Swift 推荐使用的 for-in 循环。

for index in 0..<3
{
    print("index is \(index)")
}

在 for-in 语句中,符号表示数值范围在0~3之间,但是并不包含数字3,所以结果如下: 

index is 0

index is 1

index is 2

如果需要在循环中包含数字3,可以使用 ... 符号:

for index in 0 ... 3
{
    print("index is \(index)")
}

以上代码在控制台输出的结果为:
index is 0
index is 1
index is 2
index is 3 

for-in 循环语句用途广泛,还可以使用该语句对数组和字典进行遍历。

let students = ["Jerry", "Thomas", "John"]
for student in students {
print("Student name:\(student)")
}

以上代码在控制台输出的结果为:
Student name: Jerry
Student name:Thomas
Student name: John

通过 for-in 循环语句可以遍历一个字典里的键值对(key-value pairs)。在遍历字典时,字典的每项元素会以(key, value)元组的形式返回。

let scores = ["Jerry":78, "Thomas":88, "John":92]
for (student, score) in scores
{
      print(student + ''' score is \(score)")
}

 以上代码在控制台输出的结果为:
John' score is 92
Jerry' score is 78
Thomas' score is 88

因为字典的内容在内部是无序的,所以遍历元素时不能保证与其插入的顺序一致,字典元素的遍历顺序和插入顺序可能不同。

2.2 while循环语句

Swift 的whie 循环语句和Objective-C 的 while 语向非常相似,主要用于重复执行某个代码块。while 语句的样式如下:

while condition {
      statements
}

其中,conditon 为执行循环语句的条件,其值如果为 true,就执行大括号里面的代码块;如果
为false,while 语句执行完毕。 

var index = 0
while index < 3
{
   index += 1
   print("Try connect server again.")
}

以上while 语句的执行结果为:
Try connect server again.
Try connect server again.
Try connect server again.

2.3 repeat-while 循环语句

Swift 1.0中的do-while 语句在Swift 2.2中已经被 repeat-while 语句所替换,但是使用方法和传统的 do-while 语句是一致的,现在将上面例子中的 while 语句修改一下:

var index = 0
repeat
{
index += 1
print("Try connect server again.")
}
while index < 3

以上repeat-while 语句的执行结果为:
Try connect server again.
Try connect server again.
Try connect server again. 

由于 repeat-while 语句是先执行代码块再进行条件的判断,因此代码段总会被执行至少一次。
将上面代码中的条件判断语句修改为:

var index = 0
repeat
{
      index += 1
      print("Try connect server again.")
}
while index < 0

以上repeat-while 语句的执行结果为:
Try connect server again. 

三.数组

所谓数组,就是将相同数据类型的元素按一定顺序进行排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分它们的变量集合,这个名字被称为数组名,编号称为数组的下标。

组成数组的各个变量称为数组的分量,也称为数组的元素,有时也被称为下标变量。Swift数组是在程序设计中,为了处理方便,把具有相同类型的若干变量接有序的形式组织起来的一种形式,这些按序排列的同类数据元素的集合称为Swift数组。

3.1 数组的定义

3.1.1 数组的创建

在Swit 中,数据值在被存储进入某个数组之前,数据的类型必须明确,方法是通过显式的类型标注或类型推断:

let stringArray = Array<String>()
let floatArray = [Float]()
let intArry = [1,2,3,4,5]

在第一行代码中,通过使用命名型类型 Array<SomeType>创建了一个字符串类型的数组,其中 SomeType 是这个数组中唯一允许存在的数据类型。

在第二行代码中,使用像 SomeType[]这样的简单语法创建了一个类型为浮点数的数组floatArray。

前面两种方法都是通过显式的类型标注创建指定类型的数组。在第三行代码中,通过给常量设置默认值,从而由Swif 对其类型做出推断。因为所有值都是整数类型,所以数组的类型被推些为整型数组。 

3.1.2 数组的访问和查找

数组中元素的访问是通过下标语法实现的:

let intArry = [1, 2, 3, 4, 5]
print(intArry[2])
//结果为:3

通过使用数组的只读属性 count 和 isEmpty 可以获取数组中的元素数量:

intArry.isEmpty
//判断数组是否为空,结果为:false
intArry.count
//获得数组中元素的数量,结果为:5

 通过使用数组的contains()方法可以判断数组中是否存在某个元素:

intArry.contains(3)
//判断数组中是否存在3,结果为:true

3.1.3 数组的编辑

在Swift 中,可以使用数组的 append()方法或者直接使用加号“+”往已有的数组中添加新的
元素。 

var intArry = [1, 2, 3, 4, 5]
IntAry +=[6]                  //intArray 的元素:[1,2,3,4,5,6]
intArry.append(7)             //intArray的元素:[1,2,3,4,5,6,7]

 如果需要在数组的中间位置添加新的元素,可以使用指定的 index 位置,该位置原来的元素将依次右移。

1 intArry insert(100, at: 2)
2 //intArray 的元素:[1,2,100, 3,4,5,6,7]

在Swift 中,修改数组中的某个元素也是非常简单的。首先使用下标定位需要修改的元素,然后直接给元素指定新的值即可。

intArry[2]=9
//intArray 的元素:[1,2,9,3,4,5,6,7]

使用这种方式甚至可以一次性修改数组中多个元素的值: 

intAmy[3...5]=[8,8,8]
//intArray 的元素:[1,2,9,8,8,8,6,7]

Swift 数组提供了几种remove 方法,用来删除数组中的元素。 

intArry.removeFirst()
//intArray 的元素:[2,9,8,8,8, 6,7]
intArry.removeLast()
//intArray 的元素:[2,9,8, 8, 8,6]
intArry.remove(at: 2)
//intArray 的元素:[2,9,8,8,6]
intArry.removeSubrange(Range(1..<3))
// intArray 的元素:[2,8,6]
intArry.removeAll()
//intArray 的元素:[]

3.1.4 数组的排序

相对于Objective-C语言来说,在Swift中对数组排序变得极为简单。

var inArry = [11,22,3,14,25]
intArry.sort()                //输出的结果:[3,11,14,22,25]

sort()方法默认是按升序进行排列的 ,按照降序对数组排列如下:

intArry.sort(by:>)
//输出的结果:[25,22,14,11,3]

对拥有复杂类型元素的数组进行排序也是非常简单的,在下面的例子中创建一个包含3个元组对应的数组,并且按照元组中姓名的升序进行排列。

var userList = [(name: " Thomas", age: 20), (name: " John", age: 32), (name: " Bill", age: 28)]
userList.sort { $O.name < $1.name }

userList 排序后的结果为[("Bill”",28),("John",32),("Thomas",20)]。

3.2 多维数组

多维数组是指在数组中仍然存在其他数组。

可以将多维数组理解为:通过几次索引可以找到存储的值就为几维数组,例如在一维数组userList 中,通过一个索引值 userList[0]就可以查到第一个用户;在二维数组 userList2 中,需要进行两次索引 userList[0][0]才可以查到第一个用户。

多维数组的创建与一维数组类似,以下代码定义了一个包含整数元素的二维数组。 

var intArry = [[Int]]()

同样,可以通过指定初始值的方法创建一个多维数组。 

let numbers = [[1, 2, 3], [4, 5, 6, 7]]

和一维数组一样,可以使用 append0方法往多维数组中添加更多数组元素: 

var numbers = [[1, 2, 3], [4, 5, 6, 7]]
numbers.append([8,9,10])         //numbers 的元素:[[1,2,3], [4, 5,6, 7], [8, 9,10]]

获取多维数组中的元素的方法:假如你需要获得 numbers 数组中的这8个数字,首先需要通过 numbers[2]获得[8, 9,10]数组,然后通过 numbers[2][0]获得[8,9,10]数组中的第一个元素,即通过 numbers[2][0]获得第三个子数组中的第一个元素:8。 

四.Swift UI学习

进入Xcode,选择“Create New Project”。df06900ea52d47548676cb533d9c6ea5.png

在最上方栏中选择“iOS”,并在下方选择“APP”。

e439b021ba084d3caa3d863c8f7167e3.png

 命名。

在最左边的栏中选择“ContentView”,这样就可以看到通过编写代码所呈现在手机上的画面。

fbb3229ff4ac4b8f9407b8a97148849e.png

 现在对代码中的“Hello,world!"进行更改。

4cc529f47fa44b54874364a8948d9b51.png

 可以看到,当把原代码中的“Hello,world!”更改为“vamos!”后,右边所呈现的画面也同时被更改为“vamos!”。

8be3c8a20a3f41c9aaf63cd62c2ab4cb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值