如果你习惯了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. ubantu16与windows下——redis的安装与使用

      (1) 打开ubantu16,使用如下命令下载安装包 wget http://download.redis.io/releases/redis-2.8.3.tar.gz (2)解压缩命令: tar ...

  2. 文件包含-phpinfo()

    我也是听朋友说有这个姿势的,github有集成好的环境 先讲一下利用phpinfo上传文件,然后在文件包含的原理: 在给PHP发送POST数据包时,如果数据包里包含文件区块,无论访问的代码中是否有处理 ...

  3. ZooKeeper 基本概念并介绍RPC中Netty和Zookeeper的使用

    前言 ZooKeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等.Zookeeper提供一个类似Linux文件系统的属性结构,每个节点可存储少量的内存文件,并提供每 ...

  4. javamelody简单介绍

    JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java  CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请求. ...

  5. 【odoo14】第十五章、网站客户端开发

    odoo的web客户端.后台是员工经常使用的地方.在第九章中,我们了解了如何使用后台提供的各种可能性.本章,我们将了解如何扩展这种可能性.其中web模块包含了我们在使用odoo中的各种交互行为. 本章 ...

  6. Vulkan移植GpuImage(二)Harris角点检测与导向滤波

    Harris角点检测 UI还是用的上次扣像的,只有前后置可以用,别的没有效果,只看实现就好. 相应源码 在实现之前,我先重新整理编译glsl的生成工具,如Harris角点检测中间计算过程需要针对rgb ...

  7. 【Django笔记0】-Django项目创建,settings设置,运行

    Django项目创建,settings设置,运行 1,项目创建 ​ 通过pip下载Django以后,在cmd中cd到想要创建项目的路径,之后输入: django-admin startproject ...

  8. 为科学计算而生的Julia——基于Manjaro Linux的安装与入门

    技术背景 Julia是一门为科学计算而生的编程语言,其着重强调了开源.生态与性能.从开源角度来说,相比于Matlab就要友好很多,用户可以免费使用,而且MIT协议应该是最宽松的开源协议之一(截图来自于 ...

  9. 如何在Google Web Toolkit环境下Getshell

    出品|MS08067实验室(www.ms08067.com) 本文作者:大盗贼卡卡 Google Web Toolkit简称(GWT),是一款开源Java软件开发框架.今天这篇文章会介绍如何在这样的环 ...

  10. istio sidecar使用自定义镜像源

    Istio 和 sidecar 配置保存在 istio 和 istio-sidecar-injector 这两个 ConfigMap 中,其中包含了 Go template,所谓自动 sidecar ...