如果你习惯了OC的语法,第一次接触Swift的语法可能会有点抗拒,因为Swift的语法有点怪。但如果你有前端的基础,学Swift可能会有点吃力,如果你有C++的基础可能会学得比较快点。不管你有什么样的语法基础,学会Swift后你都会觉得这是门优秀的语言,总之相比哥哥OC更简洁,更高效。现在Swift的ABI版本已经到5.2了,总体趋于稳定,社区也很活跃,是系统学习的好时机。

一、打印(print)

可以认为是C的扩展写法:

let word = "world"
print("print output") // 输出:print output
print("hello \(word)") // 输出:hello world
  • 以往OC中打印变量使用NSLog("hello_%@",var),Swift使用\(变量)

二、分号

  • 一句代码尾部可以省略分号(;
  • 多句代码写到同一行时必须用分号(;

三、注释

  • 单行注释(//)
  • 多行注释--支持多行嵌套,但必须是双标签(/**/)
// 单行注释

/*
多行注释
*/ /*
1.多行注释
/* 多行注释的嵌套 */
2.多行注释
*/

Playground的注释支持markup语法(和markdown相似)

如何开启markup语法预览?

  • 选中当前行 -> 菜单栏 -> Editor -> Show Rendered Markup
  • 开启渲染:Show Rendered Markup
  • 关闭渲染:Show Raw Markup
  • 注意:markup语法只在Playground中有效

四、Markup语法

//: # 一级标题
//: ## 二级标题 /*:
# 一级标题 ## 无序列表
- 第一个元素
- 第二个元素 ## 有序列表
1. 第一个元素
2. 第二个元素 ## 笔记
> 这是一个笔记 ## 分割线
--- ## 图片
![图片描述](图片链接) ## 链接
[链接标题](链接地址) ## 粗体/斜体
这是**粗体**,这是*斜体*
*/

  • 单行注释时,冒号前面不能有空格,后面必须有空格
  • 多行注释时,冒号前面不能有空格,后面不能有内容,必须另起一行

五、标识符

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

六、数据类型

Swift没有基本数据类型的概念,数据类型分为两大类:

6.1. 值类型(value-type)

  • 枚举(enum)

    • Optional
  • 结构体(struct)
    • Bool、Int、Float、Double、Character
    • String、Array、Dictionary、Set

6.1.1. 整数类型

  • Int8、Int16、Int32、Int64、UInt8、UInt16、UInt32、UInt64
  • 在32bit平台,Int等价于Int32;在64bit平台,Int等价于Int64。一般情况下直接使用Int即可,除非对内存有严格要求。
  • 整数的最值:UInt8.max、Int16.min

6.1.2. 浮点类型

  • Float,32位,精度只有6位
  • Double,64位,精度至少15位

6.1.3. 字面量

  • 布尔类型值在OC中是01,但Swift中是truefalse(和大部分语言一样)
  • 字符串类型值用双引号
  • 字符类型值和字符串一样都是用双引号括起来,但是字符变量必须用Character修饰,否则会默认是字符串
/// 布尔
let bool = true // 字符串
let string = "1024星球" // 字符
let character: Character = "" // 整数
let intDecimal = 20
let intBinary = 0b10001
let intOctal = 0o21
let intHexDecimal = 0x11 // 浮点数
let doubleDecimal = 125.0 // 十进制,等价于1.25e2,例:0.0125 <=> 1.25e-2 let doubleHexDecimal1 = 0xFp2 // 十六进制,意味着15x2^2,相当于十进制的60.0 let doubleHexDecimal2 = 0xFp-2 // 十六进制,意味着15x2^-2,相当于十进制的3.75 /* 以下都是表示12.1875
十进制:12.1875、1.21875e1
十六进制:0xC.3p0
*/ // 数组
let array = [1, 2, 3, 4, 5] // 字典
let dictionary = ["age" : 20, "height" : 1.88]
  • 整数和浮点数可以添加额外的零或者添加下划线来增强可读性

    • 100_0000、1_000_000.000_000_1、000123.456

6.2. 引用类型(reference type)

  • 类(class)



    通过官方简介即可看出,Int是用struct描述的

七、类型转换

7.1. 整数转换

在Swift中不同类型之间是不能运算的,否则编译器会报错

正确做法:

let int1: UInt16 = 2_000
let int2: UInt8 = 1
let int3 = int1 + UInt16(int2)
  • 把低类型转为高类型(为什么?字节占用)

7.2. 整数、浮点数转换

let int1: UInt16 = 2_000
let int2: UInt8 = 1
let int3 = int1 + UInt16(int2) let int = 3
let double = 0.1415926
let pi = Double(int) + double
print(pi) // 输出:3.1415926
let intPi = int + Int(double)
print(intPi) // 输出:3
  • 浮点转为整形是会把小数点后放弃,只取浮点整数部分

思考:每次都需要转换,对于未知类型的数据(服务器返回的数据)怎么办?

// 字面量可以直接相加,因为数字字面量本身没有明确类型
let result = 3 + 0.1415926
print(result) // 输出:3.1415926

八、var和let

  • let代表常量,var代表变量(variable缩写)
  • 编译器能自动推断出变量/常量的类型
  • 两个使用前必须初始化(和其他语言不一样,编译时可以不用初始化),否则编译报错





格式:

let 变量名: 变量类型 = 变量值;

var 变量名: 变量类型 = 变量值;

示例

let age: Int = 10;
print(age) // 输出:10 var name: String = "idbeny";
print(name) // 输出:idbeny

九、元组

元组是借鉴C++中的概念(Python中也有此类型):

  • 元组与列表类似,不同之处在于元组的元素不能修改。
  • 元组使用小括号,列表使用方括号。
  • 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可(无限的)。
  • 元组解构用法时,变量名不能和其他同作用域的常规定义变量冲突

格式:

/*
格式一:常规
读取格式:变量名.索引
*/
变量修饰符 变量名 = (元素值,多个逗号分隔) /*
格式二:解构
变量修饰符 (元组值对应的变量名称,位置要一一对应) = 已定义元组变量
读取格式:变量名称
*/
变量修饰符 (元组值对应的变量名称,位置要一一对应) = 已定义元组变量 // 解构扩展:对应位置不需要的时候可用下划线代替
变量修饰符 (元组值对应的变量名称,_) = 已定义元组变量 /*
格式三:key-value
读取格式:1. 变量名.索引 2. 变量名.元素变量名
*/
变量修饰符 变量名 = (元素变量名:元素值,……)

示例:

let tup1 = (404, "Not Found", "moreParas")
print(tup1.0,tup1.1,tup1.2) // 输出:404 Not Found moreParas let (statusCode, statusDesc, paras) = tup1
print(statusCode, statusDesc, paras) // 输出:404 Not Found moreParas let (tempStatusCode, _, _) = tup1
print(tempStatusCode) // 输出:404 let httpStatus = (statusCode: 404, statusDesc: "Not Found", paras: "moreParas")
print(httpStatus.statusCode, httpStatus.statusDesc, httpStatus.paras) // 输出:404 Not Found moreParas

Swift系列一 - 数据类型的更多相关文章

  1. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  2. 窥探Swift之基本数据类型

    在上一篇博客“窥探Swift编程之在Playground上尽情的玩耍”中介绍了如何使用Playground来学习Swift语言.本篇博客就使用Playground来窥探Swift语言.千里之行始于足下 ...

  3. [译]Modern Core Graphics with Swift系列

    第一篇 想象一下你已经完成了你的app并且运行的很好,但是界面看上去太土,你可以在PS里面画好多不同尺寸的自定义控件,Apple并没有4x的retina屏幕. 或者你已经未雨绸缪,在代码中使用Core ...

  4. 窥探Swift之新添数据类型元组与可选值

    今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional).上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些 ...

  5. [Swift系列]003- 函数

    [基础] Swift函数格式: 1.定义格式: func   函数名(参数名1:数据类型,... ,参数名n:数据类型) -> (返回值类型1,...,返回值类型n){ ///函数体内语句 } ...

  6. [Swift系列]002-基础语法

    基础语法就那老几样,很快可以说完 [常量.变量] 1.变量用 var,系统自动去判断类型,但变量再次赋值需保持数据类型一致 var  a=50 相信用过js/java/C#的,对这个var都不陌生 使 ...

  7. [Swift系列]001-入门准备

    [引子] 最新的苹果发布会上公布了新的苹果编程语言Swift,并且演示了Xcode 6 Beta的一些新功能. 据苹果公司称,这个新语言开放的API更多,实用起来更方便,总之是值得学习.使用,比C/o ...

  8. [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念

    上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...

  9. Mysql优化系列之数据类型优化

    本篇是优化系列的第一篇:数据类型 为了不产生赘述,尽量用简洁的语言来描述. 在选择数据类型之前,首先要知道几个原则: 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型意味着更快, ...

随机推荐

  1. Java流程控制:增强for循环,break&continue,打印99乘法表

    增强for循环:java5引入了一种主要用于数组或集合的增强for循环for(声明语句:表达式){//代码句子} 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配.其作用域限定在循环语 ...

  2. Java传参:值传递 or 引用传递 ?

    刚开始学Java的时候一度以为:基本数据类型是值传递,引用类型是引用传递.新人很容易在这两个概念上面被搞糊涂,后来看了Hollis的文章才明白了Java中只有值传递. 接下来我能用简单明了的方式来说明 ...

  3. BuaacodingT141 microhhh的回城 题解(模拟)

    题目链接 microhhh的回城 解题思路 这题挺有意思的.本来寻思放在\(DS\)第一次练习赛应该不会很难吧,结果愣是卡在数据范围上写不出来. 然后暴力过掉了,但是用了\(1019ms\).感觉可以 ...

  4. 用水浒传来学习OKR

    用水浒传来学习OKR 目录 用水浒传来学习OKR 0x00 摘要 0x01 OKR 1.1 基本概念 1.2 OKR管理的意义 1.3 Objective 1.3.1 什么是好的O 1.3.2 上下级 ...

  5. 【python+selenium的web自动化】- 针对上传操作的实现方案

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 关于上传操作 ​ 上传有两 ...

  6. RichText实现动态输入关键字高亮颜色显示

    int a = 0; string[] kc = new string[40] { "private","protected","public&quo ...

  7. c++ 反汇编 局部静态变量

    vs2017下测试 34: for (int i = 0; i < 5; i++) 0029734E C7 45 F8 00 00 00 00 mov dword ptr [ebp-8],0 0 ...

  8. Error message: Failed to spawn: unable to access process with pid 413 due to system restrictions; try `sudo sysctl kernel.yama.ptrace_scope=0`, or run Frida as root

    Android 8.0 在frida中使用 -f 参数报错, Error message: Failed to spawn: unable to access process with pid 413 ...

  9. 计算机体系结构——CH4 输入输出系统

    计算机体系结构--CH4 输入输出系统 右键点击查看图像,查看清晰图像 X-mind 计算机体系结构--CH4 输入输出系统 输入输出原理 特点 实时性 与设备无关性 异步性 输入输出系统的组织方式 ...

  10. 一文彻底掌握Apache Hudi的主键和分区配置

    1. 介绍 Hudi中的每个记录都由HoodieKey唯一标识,HoodieKey由记录键和记录所属的分区路径组成.基于此设计Hudi可以将更新和删除快速应用于指定记录.Hudi使用分区路径字段对数据 ...