前言
准备打算用一个月时间学习Swift,包括语法跟实战,顺便写写博客记录学习里程,方便日后重拾。
目录
- Playgrounds
- 表达式,变量 & 常量
- 自增 自减
- 类型转换
- 字符串(Strings)的使用
- 元组(Tuples)
Playgrounds
-
新建Playgrounds
包括命名存放位置等等····
用Playgrounds的好处是不用运行可以知道结果,所以用来学习语法再好不过了。
- Playgrounds概述
- 代码编写区
- 编写代码结果的显示
- Playgrounds默认是自动执行,这意味着写完代码下一刻就能看到输出结果了。按住不放,就可以看到两个选项,1.自动执行 2.手动执行
- 显示的是playground的状态,只要不停的输入代码,就好会菊花器不舍昼夜的转,表示正在执行···
- 略(这个自己点的看看就知道是干什么的了)
表达式,变量 & 常量
- 代码注释
单行注释
// 这是单行注释
多行注释
/* 这是注释
依然是注释
还TM是注释 ... */```
* 控制台打印结果
` print("Hello , Swift Apprentice reader!") `
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1292402-b096cf530b36a0d6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 算术运算
这里要注意的是书写格式,要么操作符(+ - * /)两边都不要空格,要么都加空格。
2+6 // OK
2 + 6 // OK
2 +6 // ERROR
2+ 6 // ERROR```
- 数学函数
Swift中已经包含大部分数学函数,下面看看怎么用吧~
sin(45 * Double.pi / 180)
// 0.7071067811865475
cos(135 * Double.pi / 180)
// -0.7071067811865475
sqrt(2.0)
// 1.414213562373095
max(5, 10)
// 10
min(-5, -10)
// -10
max(sqrt(2.0), Double.pi / 2)
// 1.570796326794897
- 常量 & 变量
常量
let number: Int = 10
number = 20 //error 值不可变
变量
var variableNumber: Int = 42
variableNumber = 0 //OK
variableNumber = 1_000_000 //OK
- 常量 & 变量命名
继承OC语言风格使用驼峰命名法,第一个单词首个字母小写后面单词第一个字母大写,命名尽量清晰明了。
例如:
let personAge: Int = 10
let numberOfPeople: Int = 10
自增 自减
var counter: Int = 0
counter += 1 //等于 counter = counter + 1
// counter = 1
counter -= 1 //等于 counter = counter - 1
// counter = 0 //
有一点需要注意的是现在swift中不支持 ++ 和 -- 了,使用了++或者--就会出现编译错误❌
同样的,对应乘除也是适用的
var counter: Int = 10
counter *= 3 // same as counter = counter * 3
// counter = 30
counter /= 2 // same as counter = counter / 2
// counter = 15
类型转换
- 赋值运算两边类型转换
var integer: Int = 100
var decimal: Double = 12.5
integer = decimal```
如果想把Double型变量赋值给Int型,就会出现`
Cannot assign value of type 'Double' to type 'Int'`错误,我们潜意识中认为不会出错,但是swift是强类型语言,所以必须相同的类型才能赋值。
像这样:
var integer: Int = 100
var decimal: Double = 12.5
integer = Int(decimal) // integer = 12
* 操作符与混合类型
let hourlyRate: Double = 19.5
let hoursWorked: Int = 10
let totalCost: Double = hourlyRate * hoursWorked // error
let totalCost: Double = hourlyRate * Double(hoursWorked) //OK
上述代码会出现`Binary operator '*' cannot be applied to operands of type 'Double' and
'Int'`错误,其他数学运算对于不同的类型也会出现类似错误。在swift中,必须明确类型,因为结果只有一个类型。
* 类型推断
顾名思义就是声明的变量或常量根据赋值右值类型判断自己的类型。
例如:
let wantAInt = 3 // wantADouble is Int
let wantADouble = 3.0 // wantADouble is Double
按住option鼠标点击变量或常量名就可以看到类型了
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1292402-baa9497845a7da5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#### 字符串(Strings)的使用
字符串其实就是字符(characters)的集合,swift可以直接操作字符串(strings)和字符(characters)
let characterA: Character = "a"
let characterDog: Character = "👻"
let stringDogA: String = "Dog"
let stringDogB = "Dog" // stringDogB is String
let stringDogC: String = "a" // stringDogC is String```
这里需要注意的是,无论赋值字符串或者字符给变量(常量),都会被推断为String,如果要声明为字符类型一定要明确。像这样 :let characterA: Character = "a"
- 操作字符串
无论是字符串的拼接还是插入数字都非常方便
//拼接
var message = "Hello" + " my name is " //message = "Hello my name is"
let name = "Matt"
message += name // message "Hello my name is Matt"
//插入数字
messageAge = ""
let age = 10
messageAge += " My age is" + String(age)" //My age is 10
//插入字符串
message = "This is string "
let exclamationMark: Character = "a"
message += String(exclamationMa) //This is string a
拼接或插入之前都要转换为String类型,其实还有一种更逆天的方法,使用 \()
,不但逆天,而且通俗易懂
var message = ""
let age = 10
let rate = 2
let character: Character = "a"
message = "Hello, my age is \(age)"//"Hello, my age is 10"
message = "10 years later,my age is \(age * rate)" //10 years later,my age is 20
message = "I like \(character)" //"I like a"
元组(Tuples)
swift中使用tuple来表示简单的有关联的数据,比如说一对二维坐标(x ,y)
let coordinates: (Int, Int) = (2, 3)
// 也可以使用类型推断
let coordinates = (2.1, 3.2) // coordinates被推断的类型为: (Double, Double)
// 分别打印坐标的值,访问元组第一个成员 元组名.0,第二个第三个以此类推···
print("x坐标为\(coordinates.0)") //x坐标为2.1
print("y坐标为\(coordinates.1)") //y坐标为3.2
其实swift中支持为元组成员命名
let coordinatesNamed = (x: 2, y: 3) // 这时被推断类型为: (x: Int, y: Int)
// 访问
print("x坐标为\(coordinates.x)") //x坐标为2
print("y坐标为\(coordinates.y)") //y坐标为3
总结
初级篇就先写这么多了,后面会陆续写更复杂一点的语法内容。当然,除了语法外还有实战篇。