基本运算 流程控制 函数

2019-08-08  本文已影响0人  纳兰沫

ABI

ABI 应用程序和操作系统之间的二进制接口
涉及的内容有  目标文件格式 数据类型的大小/布局/对齐 函数调用约定等等
LLVM 作为编译器的后端 生成对应平台的二进制代码

OC Swift区别

OC Swift
- OC 编译器的前端是Clang LLVM 是编译器的后端  生成对应平台的二进制代码
- Swift 编译器的前端是swiftc  进行词法分析 生成语法树  LLVM 是编译器的后端  生成对应平台的二进制代码

swiftc 位置

swiftc 存放在在Xcode内部
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc

swiftc 操作

- 生成语法树  swiftc -dump-ast main.swift 语法树结果直接生成在终端
swiftc -dump-ast main.swift -o main.ast 会把语法树结果生成在main.ast文件内
- 生成最简洁的SIL代码 swiftc -emit-sil main.swift
- 生成LLVM IR代码 swiftc -emit-ir main.swift -o main.ll
- 生成汇编代码 swiftc -emit-assembly main.swift -o main.s

对汇编代码进行分析 可以真正掌握编程语言的本质

Swift

- 不用编写main函数 Swift将全局范围内首句可执行代码作为程序的入口
- 一句代码尾部可以省略分号 多句代码写在同一行必须要用分号进行分割
- 用var声明变量 用let声明常量 编译器能够自动推断出变量/常量的类型
- playground可以快速预览代码校验效果
command + shif + Enter 运行Playground
shift + enter 运行截止到某一行代码

playground

PlaygroundPage.current.liveView = MyViewController()
展示界面

注释

嵌套注释
/*
1
/* 多行注释 */
2
*/
playground注释支持markup语法(与markdown相似)
单行开启markup
//:
多行开启markup
/*:
# 一级标题
*/

markup只在playground中有效

> This is a note
markup
内置跳转不同playground的方法
//:[下一页](@next)
//:[上一页](@previous)

常量

- 只能赋值一次
- 他的值不要求在编译时期确定 但是使用之前必须赋值一次

常量 变量在初始化之前 不能使用

标识符

- 标识符(比如常量名 变量名 函数名) 几乎可以使用任何字符
- 标识符不能以数字开头 不能包含空白字符 制表符  箭头等特殊字符

常见数据类型

数据类型.png
- 整数类型 Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64
- 在32bit平台 Int等价于Int32 在64bit平台 Int等价于Int64
- 整数的最值 UInt8.max Int16.min
- 一般情况下 都是直接使用Int即可
- 浮点类型 Float 32位 精度只有6位 Double 64位 精度最少15位

字面量

字符类型的时候必须指定类型名称Character 否则会认为是字符串类型

字符可存储ASCII字符 和 Unicode字符
let char: Character = "3"
浮点数.png

类型转换

字面量可以直接相加 因为数字字面量本身是没有明确的类型

元祖 tuple

let http404Error = (404,"Not Found")
http404Error.0
http404Error.1
let (statusCode,statusMessage) = http404Error
statusCode
statusMessage
let (justTheStatusCode,_) = http404Error
justTheStatusCode
let http200Status = (statusCode:200, statusMessage:"ok")
http200Status.statusCode
http200Status.statusMessage
上一篇 下一篇

猜你喜欢

热点阅读