0.Swift语言背景的介绍
- 历史6年(2014年6月发布),Swift从1.x发展到5.x,经历了多次重大改变,ABI终于稳定
- ABI(Application Binary Interface):应用二进制接口,应用程序和操作系统之间的底层接口,涉及到:
- 1.目标的文件格式
- 2.数据类型的大小,布局,对齐
- 3.函数的调用约定等等
- ABI稳定以后,语法不会有太大变动
- Swift是用C++编写的
1. playground 使用
关于playground的创建和使用这里不赘述了,百谷一堆(😁百度和谷歌一查一堆一堆的),它的优点就是可以试试预览一些结果,比如输入 a+b,他就能反映出a+b的结果,也可以预览一些视图的比如背景色之类的
1.1 常用快捷键
- cmd + shift + enter 运行整个prayground
- shift + enter 运行到某行及之前的代码
1.2 视图预览
- 如果需要预览视图,需要
import PlaygroundSupport
,然后将要显示的view赋值给以下代码-
PlaygroundPage.current.liveView = view
, - 如果不显示预览视图,可以试试
cmd+option+enter
-
- 添加图片资源,cmd+1,展开左边的文件夹目录,将资源拖拽到
Resource
中,则可以引用图片资源 -
Source
文件夹是存放代码文件的 - 同样也可以创建控制器,不赘述了,详细看demo
1.3 多page介绍
- Xcode菜单栏
File -> New -> Playground Page
或者 快捷键option+cmd+n
- 新建的page可以自由修改名字,可以拖动位置,每个page包含单独的
Source
和Resource
,在每个page每部的文件夹内的资源是只有当前page可以使用,项目的Source
和Resource
是所有的page都共享的
5.多page.png
1.4 Markdown语法支持
playground 可以与注释配合生成对Markdown语法的渲染,这里不过多赘述Markdown的语法,百谷一堆。
- 单行行注释的Marksown:
//:
双反斜杠加冒号,斜杠和冒号之间不能有空格,后面跟单行的Markdow语句
//:# 这是Markdown的一级标题
- 多行注释注释的Marksown:
/*: 这里写Markdown语句 */
/*:
# 这是Markdown的一级标题
## 这是Markdown的二级标题
### 这是Markdown的三级标题
*/
-
同一个playground下的多个page的跳转
@next
和@previous
-
//: [下一页](@next)
自动跳转到当前page的下一个page,并显示为下一页
,如果当前page没有下一页的话,则点击无效 -
//: [上一页](@previous)
自动跳转到当前page的上一个page,并显示为上一页
,如果当前page没有上一页的话,则点击无效
-
-
Markdown语法编写完毕之后通过Xcode -> Editor -> Show Rendered Markup
2.简单入门
这一节中我们只是泛泛的简单的演示一些操作,对于有编程基础一看就能懂的东西,不做过多赘述
2.1 我们先创建一个命令行项目,大致观察一下项目结构
1.commandLine 项目图 // 导包
import Foundation
// 打印
print("Hello, World!")
- 项目很简单:
- 仅包含一个main文件,
- main文件中并没有我们熟悉的main函数,
- 实现
Hello, World!
只需要一行代码,更简单甚至可以去掉导包 - Swift项目的文件的后缀名为
.swift
,和OC项目不同的是,不再区分声明.h和实现.m - 一句代码尾部可以省略分号,多句代码如果在同一一行,必须用分号隔开
2.2 简单了解print
- 基本打印,在
print
函数里直接书输入变量名字 - 字符拼接,只需要在字符串中使用
\(变量名)
进行包裹即可
4.基本打印.png
2.3 简单了解变量和常量
- 常量
- 用
let
声明不可以重复赋值,重复赋值会报错
2.变量常量报错图.png - 常量不要求在编译期就明确赋值,但是只能赋值1次
-
未标明类型的常量,或者不能通过自动推断出变量类型的,必须在声明时赋值
6.常量报错图
- 用
- 变量用
var
声明,可以重复赋值, -
变量或者常量不需要声明类型,编译器通过自动推断出类型
3.自动推断.png
3.Swift数据类型
与OC不同的是,Swift的数据类型大致分类两种,或者三种,按照两种划分
- 值类型 -
enum + struct
- 引用类型 -
class
按照三种划分,可以将enum 和 struct 各自作为一类。enum 这个不足赘述了,后续会详细展开,struct类型的范围是与OC最大的不同,其中Bool Int Float Double Character 以及String Array Dictionary Set都是用struct实现的
7.数据类型
3.1 简单介绍数据类型
整形
- 整形类型: Int8,Int16,Int32,Int64,UInt8,UInt16,UInt32,UInt64
- 在32位系统,Int等价于Int32,64位系统等价于Int64
浮点型:
-
Float 32位,精度6位,
-
Double 64位,精度至少15位
-
浮点型定义变量时默认为Double,如果是用Float类型时,要显式标注
// 浮点型 let double = 15.0 // Double 类型 let float:Float = 10.0 //Float 类型
布尔类型
- 在OC中 0,1,YES,NO,true,flase都可以作为布尔类型的赋值,但是在Swift中只能是true false,不接受其他值
字符和字符串
-
字符和字符串都是使用双引号,再不加类型标注的时候默认是字符串,如果是定义字符需要显式的标注
// 字符 和 字符串 let string = "字符串" let character:Character = "😁"
3.2 类型转换
-
Swift在进行数值计算时,不会进行类型自动转换,比如我们以前在OC中一个浮点型 加上 一个整形数据,然后结果会看做浮点型,相当于是自动转换为优先级高的类型,但是在Swift中不允许这样进行计算,要求进行计算的结果变量类型一定是一致的,否则就会报错
8.类型转换.png -
Swift类型强转,格式为
类型(要转换的值)
,下面的例子是将Float转换为Double,通过这个例子也能看出,同是浮点类型的数据,也不能直接计算// 浮点型 let double = 15.0 // Double 类型 let float:Float = 10.0 //Float 类型 let value = double + Double(float)
-
这里有个例外就是如果字面量直接向加减是不会报错的,因为没有明确的表明类型,最后系统会根据数值进行推断的
let value = 1 + 0.5
4.元组
概念不多介绍了,百谷一堆。介绍几种赋值和定义的方式
// 元组
// 1.基本定义
let tuple = (0,"我是字符串",true)
// 2.根据每个元素名字定义
let (intValue,stringValue,boolValue) = (0,"我是字符串",true)
intValue
stringValue
boolValue
// 3.第二种也可以省略其中不需要取值元素
let (_,stringValue1,boolValue1) = (1,"我是字符串2",true)
// 4.也可以在实现的时候声明元素名字
let tuple2 = (int:2, string: "我是字符串3", bool:true)
tuple2.int
tuple2.string
tuple2.bool
9.元组演示.png
网友评论