本篇是我在学完一遍基础语法知识的时候,第一遍复习,我一遍梳理一遍记录的笔记。同时分享给像我一样在学习swift 的猿友们。

本篇可能过于冗长、所以所有的参考资料都分模块的写在palyground 里,上传在github 里,地址:https://github.com/NIUXINGJIAN/SWIFT_PLAYGROUND.git

本篇内含有部分的 Markdown 语法,因为草稿写在简书里<我的简书链接>,这里直接粘贴复制一下,不懂Markdown语法的可以去间书里查看。

#一、基础语法

- ** 导入模块与框架**

我们可以使用 import 语句来引入任何的 Objective-C 框架(或 C 库)到 Swift 程序中。例如 import UIKit 语句导入了使用了 UIKit 库和API,我们可以在 Swift 程序中使用他们。

- ** 注释**
swift 的注释与 C 语言的及其的相似;单行注释以两个反斜线开头;
多行注释以 与 OC 一样的,多行注释内还可以嵌套多行注释。

- ** 分割号 “;” **

对于 分割号 ,如果代码是一行的话,可以不写分割号,但是代码是多行的话,就必须要写分割号。

- ** 标记**
Swift 程序由多种标记组成,标记可以是单词,标识符,常量,字符串或符号。

- ** 标识符**

标识符就是给变量、常量、方法、函数、枚举、结构体、类、协议等指定的名字。构成标识符的字母均有一定的规范,Swift语言中标识符的命名规则如下:
 区分大小写,Myname与myname是两个不同的标识符;

标识符首字符可以以下划线(_)或者字母开始,但不能是数字;
 标识符中其他字符可以是下划线(_)、字母或数字。
 
 注意:Swift中的字母采用的是Unicode编码[1]。Unicode叫做统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们在聊天工具中使用的表情符号
 如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号(`)

- ** 关键字**

1、与声明有关的关键字
 
 class 、deinit、 enum、 extension、 func 、import、 init 、internal、 let 、operator 、private、protocol、public 、static 、struct、 subscript、typealias 、var
 
 2、与语句有关的关键字

break 、case 、continue 、default、do 、else 、fallthrough 、for 、if 、in 、return 、switch、where 、while
 
 3、表达式和类型关键字

as 、dynamicType、 false、 is、nil 、self 、Self 、super、 true、 _COLUMN_ 、_FILE_ 、_FUNCTION_ 、_LINE_
 
 4、在特定上下文中使用的关键字

associativity 、convenience 、dynamic 、didSet 、final 、get、 infix 、inout、lazy 、left 、mutating 、none、nonmutating 、optional 、override 、postfix 、precedence 、prefix 、Protocol 、required、 right 、set、 Type 、unowned、weak 、willSet

- ** 空格 **

swift 的空格:
 Swift语言并不是像C/C++,Java那样完全忽视空格,Swift对空格的使用有一定的要求,但是又不像Python对缩进的要求那么严格。
 在Swift中,运算符不能直接跟在变量或常量的后面。例如下面的代码会报错:

eg:
 下面是错误的写法:
 let a= 3 + 4
 let a = 3+ 4
 let a = 3 +4

下面是正确的写法
 let a = 3+4
 let  a = 3 + 4
 print(a)

- ** 字面量 **

Swift 字面量:
 所谓字面量,就是指像特定的数字,字符串或者是布尔值这样,能够直接了当地指出自己的类型并为变量进行赋值的值。比如在下面:

42                 // 整型字面量
 3.14159            // 浮点型字面量
 "Hello, world!"    // 字符串型字面量
 true               // 布尔型字面量

- ** 类型转换 **

// let cannotBeNegative: UInt8 = -1 ;UInt8 类型不能存储负数,所以会报错
// let tooBig: Int8 = Int8.max + 1; Int8 类型不能存储超过最大值的数,所以会报错

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)// 使用了强制转换为相同类型数据,否则编译错误
//SomeType(ofInitialValue) 是调用 Swift 构造器并传入一个初始值的默认方法。 我们可以扩展现有的类型来让它 可以接收其他类型的值(包括自定义类型)

eg:
整数和浮点数的转换必须显式指定类型:
let three = 3let pointOneFourOneFiveNine = 0.14159let pi = Double(three) + pointOneFourOneFiveNine// pi 等于 3.14159,所以被推测为 Double 类型

#二、数据类型

基本的数据类型,包括整形Int、浮点数Double和Float、布尔类型Bool以及字符串类型String。此外,Swift还提供了其他更强大数据类型, Optional, Array, Dictionary, Struct, 和 Class 等。

- ** Swift 内置数据类型:**

在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。
 变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。
 所有变量都具有数据类型,以决定能够存储哪种数据。

Swift 提供了非常丰富的数据类型,以下列出了常用了几种数据类型:

- ** 内置数据类型 Int**

一般来说,你不需要专门指定整数的长度。Swift 提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:
在32位平台上,Int和Int32长度相同。
在64位平台上,Int和Int64长度相同。
除非你需要特定长度的整数,一般来说使用Int就够了。这可以提高代码一致性和可复用性。即使是在32位平台上,Int可以存储的整数范围也可以达到-2,147,483,648~2,147,483,647,大多数时候这已经足够大了。

- ** 内置数据类型 UInt **

Swift 也提供了一个特殊的无符号类型UInt,长度与当前平台的原生字长相同:
在32位平台上,UInt和UInt32长度相同。
在64位平台上,UInt和UInt64长度相同。
注意:
尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。除了这种情况,最好使用Int,即使你要存储的值已知是非负的。统一使用Int可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断。

- ** 内置数据类型 浮点数 float 、double **

浮点数:
浮点数是有小数部分的数字,比如3.14159,0.1和-273.15。
浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。

Swift 提供了两种有符号浮点数类型:
Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
Float表示32位浮点数。精度要求不高的话可以使用此类型。

注意:
Double精确度很高,至少有15位数字,而Float最少只有6位数字。选择哪个类型取决于你的代码需要处理的值的范围。

- ** 内置数据类型 (布尔值 Boolean)**
 Swift 有一个基本的布尔(Boolean)类型,叫做Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift 有两个布尔常量,true和false。

- ** 内置数据类型 (字符串、字符 ) **

字符串是字符的序列集合。如:"hello world"
 字符指的是单个字母。

内置的数据类型 (optionals  可选类型)
 使用可选类型 (optionals)来处理值可能缺失的情况。可选类型表示有值或没有值。

- ** 内置的数据类型 (数值范围)**

下面显示了不同变量类型内存的存储空间,及变量类型的最大最小值:

类型 大小(字节) 区间值
 Int8 1 字节 -127 到 127
 UInt8 1 字节 0 到 255
 Int32 4 字节 -2147483648 到 2147483647
 UInt32 4 字节 0 到 4294967295
 Int64 8 字节 -9223372036854775808 到 9223372036854775807
 UInt64 8 字节 0 到 18446744073709551615
 Float 4 字节 1.2E-38 到 3.4E+38 (~6 digits)
 Double 8 字节 2.3E-308 到 1.7E+308 (~15 digits)

- ** 内置数据类型 (类型别名)**

类型别名对当前的类型定义了另一个名字,类型别名通过使用 typealias 关键字来定义。语法格式如下:
 typealias newname = type
 例如以下定义了 Int 的类型别名为 Feet:
 typealias Feet = Int
 现在,我们可以通过别名来定义变量:
 import Cocoa

typealias Feet = Int
 var distance: Feet = 100
 print(distance)

- ** 内置数据类型 (类型安全)**

Swift 是一个类型安全(type safe)的语言。
 由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
 
 下面的程序就会报错。
 var varA = 42
 varA = "this is hello"
 print(varA)

- ** 内置数据类型 (类型的推断)**
 
 当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型。
 如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型。
 例如,如果你给一个新常量赋值42并且没有标明类型,Swift 可以推断出常量类型是Int,因为你给它赋的初始值看起来像一个整数:
 let meaningOfLife = 42
 // meaningOfLife 会被推测为 Int 类型
 同理,如果你没有给浮点字面量标明类型,Swift 会推断你想要的是Double:
 let pi = 3.14159
 // pi 会被推测为 Double 类型
 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。
 如果表达式中同时出现了整数和浮点数,会被推断为Double类型:
 let anotherPi = 3 + 0.14159
 // anotherPi 会被推测为 Double 类型
 原始值3没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推断为Double类型。

- ** Swift 还提供了下面的数据类型 **

Swift 包含了 C 和 Objective-C 上所有基础数据类型, 表示整型值; 和 表示浮点 型值; 是布尔型值; 是文本型数据。 Swift 还提供了三个基本的集合类型  NSary,NSSet , 和 NSDictionary。

除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的高阶数据类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。元组是把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。我们可以根据需要任意的组装元祖数据。

Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示 “那儿有一个值,并且它等于 x ”或者 “那儿没有值” 。可选有点像在 Objective-C 中使用 ,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的 指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。

#三、变量、常量

变量是一种使用方便的占位符,用于引用计算机内存地址。Swift 每个变量都指定了特定的类型,该类型决定了变量占用内存的大小,不同的数据类型也决定可存储值的范围。

- ** 变量的声明 **

变量声明意思是告诉编译器在内存中的哪个位置上为变量创建多大的存储空间。
 在使用变量前,你需要使用 var 关键字声明它,如下所示:
 var varA = 42
 print(varA)

- ** 变量命名**

变量名可以由字母,数字和下划线组成。
 变量名需要以字母或下划线开始。
 Swift 是一个区分大小写的语言,所以字母大写与小写是不一样的。
 变量名也可以使用简单的 Unicode 字符,如下实例:

var  uncodeName = "NJW"
 var

Swift3.0 基础学习梳理笔记(一)的更多相关文章

  1. 0基础学习web技术

    说实话0基础学习前端挺难的,当然也没有是技术是容易学习的 我只是想分享一下我的学习经历: 分为以下几点: 1:学习html和css ,学习完成之后可以模仿各大网站的静态网页 2:学习原生js基础,jq ...

  2. swift3.0基础语法

    swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...

  3. Vue1.0基础学习笔记整理

    最近一直在使用Vue.js开发项目,现将在学习过程中遇到的一些学习小细节总结如下: 1.只处理单次插值,今后的数据变化就不会再引起插值更新了 <span>This will never c ...

  4. Swift3.0基础语法学习<二>

    对象和类: // // ViewController2.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © ...

  5. 0基础学习ios开发笔记第一天

    Ios操作 界面操作 快捷键 command + c 复制 command+v 粘贴 command +a 全选 command +s 保存 command +z 撤销 command +x  剪切 ...

  6. 0基础学习ios开发笔记第二天

    C语言的基本结构 c语言的入口函数是main函数. main函数的返回值行业标准是int return 数字:返回值 每条语句最后以分号结尾 注释:行注释.块注释 int main(void) { / ...

  7. node+webpack环境搭建 vue.js 2.0 基础学习笔记

    npm install -g vue //全局安装vue npm install -g webpack //全局安装webpack npm install -g vue-cli //全局安装vue-c ...

  8. Swift3.0基础语法学习<一>

    // // ViewController.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © 2016年 ...

  9. Swift3.0基础语法学习<五>

    异常处理: // // ViewController5.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/16. // Copyright © ...

随机推荐

  1. linux mount一个硬盘

    我们在使用linux的情况下,难免有时会需要增加一块硬盘,在windows下增加硬盘很简单,所有的操作都是有画面.linux下增加一块硬盘,并且让这块硬盘可以正常的使用,所有的操作都在字符命令行的方式 ...

  2. IOS 判断当前UIViewController 是否正在显示

    我通常的做法是根据视图控制器的生命周期来判断,其是否是正在使用的状态. 举例 设一个实例布尔变量isVisible  在 -ViewWillAppear 里面 isVisible = YES ;  在 ...

  3. 认识CoreData—使用进阶

    之前两篇文章都比较偏理论,文字表达比较多一些,但都是干货!学习时先理解理论知识,才能更好的帮助后面的理解.在这篇文章中,将会涉及关于CoreData的一些复杂操作,这些操作会涉及分页查询.模糊查询.批 ...

  4. Effective java -- 7 通用程序设计

    第四十五条:将局部变量的作用域最小化 第四十六条:加强版for循环优于传统for循环 第四十七条:了解和使用类库书中提到了一个生成随机数的例子.正好需要. public static void mai ...

  5. springboot5

    1.改造购物车系统 1.1.创建购物车的Spring Boot工程 1.1.导入依赖 <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  6. sublime text的pylinter插件设置pylint_rc后提示错误

    sublime text插件pylinter提示错误 Warning: option include-ids is deprecated and ignored. 错误本身是Python的错误,这说明 ...

  7. MySQL存储过程入门教程

    存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可由应用程序通过一个调用来执行,而且 ...

  8. Spring Cloud之Feigin客户端重构思想

    应该重构接口信息(重点) toov5-parent  存放共同依赖信息 toov5-api       api的只有接口没有实现 toov5-api-member toov5-api-order to ...

  9. unity3D中一些有用的设置

    edit-project setting-time:可以设置fixed update()每一帧执行的时间 timescale:时间流动速度,设置为0则运用了time.deltatime的动画计时器均停 ...

  10. python函数的参数匹配

    版本:一般用python2.7.6 python3.4.3会标注 1.不可变对象(整数.字符串)通过对象引用进行传递,在函数内部不可改变. >>> def f(a): ... a=1 ...