创建: 2018/02/17

完成: 2018/02/19

更新: 2018/02/25 补充参照型只有类的实例和闭包

更新: 2018/03/03 加红加粗for-in注意事项, 常量不用也不能声明

【任务表】: TODO

 数据类型与变量
 Swift的数据类型

所有类的实体都是实例,都是运算对象,放到数组和哈希表里都一视同仁。

没有指针与数据本体的区别,但是被多个同时参照的时候需要区分。

值型与参照型

参照型只有类的实例和闭包

值型里的参照型可以看做指针

 基本数据类型
 Int  整数, 对所有整数都推荐用这个
 UInt  非负整数
 Float  浮点数
 Double  双倍精度浮点数
 Bool

布尔值,只有true/false

不是整数

 Character

Unicode的一个文字

不是整数

 String  Unicode字符串, 是值型
   
   
   
 数值字符
 10进制

除了开头,任何位置都可以放_

12345, 12_345, 1_2_3_4_5

开头的0忽视

012345, 0_12_345

实数

可以用e/E表示10的n次方

1.23e-1(0.123)

 16进制

0x开头, x必须小写

可用0~9, A~F/a~f, 不区分大小写

可放入_

0xA_B_1_C, 0xaB1c

也可以用科学计数法, P/p

0x1.8p0(1.5)

 8进制

0o开头, o必须小写

可放入_

0o765_432_1

 2进制

0b开头, b必须小写

可放入_

0b11010_110

   
   
   
   
   
   
 变量与常量   能用常量的不用变量
 变量的定义

var 变量名 (: 型) (= 式) // 带括号的可省略
//例
var age : Int =
var a : Int = , b : Int = // 多个用 , 连接

(推荐)可以省略型,自动判断

 常量的定义 
let 变量名 (: 型) (= 式)
// 例
let times : Int =
 类型转换

Swift不会自动进行类型转换

转换方法

// 写法
类型(变量)
// 例
var intA : Int =
Double(intA)
Float(intA)

整数之间的比较不受类型限制

其他都不能跨类型比较(整数和实数不能比,Double和Float不能比)

 字符串

""包裹, +连接, +=连接到自己后面

\t tab

\n 换行

\"   "

\\  \

\u{} 8位以内的16进制数

\() 插值

 print函数

print(..., separator: s=" ", terminator: s="\n")

指定多个参数时用separator的字符串来分割,默认空格

terminator可以指定结尾,默认换行

 数组

内部没有容量限制,随意存入取出

一个数组内部存入的实例类型必须相同

 值型

var a = [, , , , ] // 默认的类型判断

var a : [Int] = [, , , , ] // 指明类型

var s = [Int]() // 使用初始化函数

也可以以式的结果作为元素

var a = [ +, +, +, + ] // [2, 3, 4, 5]
 获取数组内部元素

array[n]

0开始,array.count-1为末尾

插入元素

array.append(v) // v是具体值

array += v

运算符

● 没有指针,* & ->的意思不一样

● . , []不是运算符

● 不存在++, --

● 等式不返回值, 不能使用连等(a = b = c), 条件式里出现等式会报错

 运算符的注意

● 两边都有或者都没有空白的被视为两项运算符

a + b,   a+b

● 单边没有空格的被视为前置/后置运算符

+a // 前置

a+ //后置

 命名法则

大驼峰记法: 型名, 类名

Int, Bool, SampleClass

小驼峰记法: 方法名, 变量名

firstVal, boderWidth, getLength

如果要用固有词做变量,加单引号(使用该变量处也要加单引号)

var `if` =
print("if = \(`if`)")
 型参数

泛型(Generics) # TODO: Supply [泛型 s13]

var a : [Int]
var a : Array<Int>
 import模块

包含基本数据结构(基本类型), 运算, 函数等的是标准库

import导入库和框架, .swiftdoc, .swiftmodule

例:

import Cocoa
import UIKit
import Foundation
import Darwin // Foundation内部系统相关部分
 命名空间

模块名.名字  (方法或者变量名)

可以嵌套, 模块名.类名.嵌套类名.名字

Swift也是命名空间,和其他的区分前面加Swift.

如Swift.print

 注释

单行注释: //

多行注释: /* ... */ 可以嵌套,内部全作为注释

 控制类语句
 文

文末不需要;  长的式子可以换行

多行可以用;分隔写在一行

代入不可以用,分隔写在一行(用;)

 if

if 条件 { // 不要括号
...
} else if 条件 {
...
} else {
...
}

if num >  {
print("num: \(num) > 0")
} else if num == {
print("num: \(num) == 0")
} else {
print("num: \(num) < 0")
}
 while

while 条件 {
...
}

repeat-while

C的(do-while)

repeat {
...
} while 条件

 for-in 

for 常量名 in 式 (where 式子) { // where可省略
...
}

常量自动声明,不用自己去声明,也不能在常量处声明

● 只在循环内部有效

 范围运算符

A..<B

1..<2

A<=x<B, [A, B)的整数

[1, 2)的整数

A...B

1...2

A<=x<=B, [A, B]的整数

[1, 2]的整数

 switch

switch 式 {
case 标签1: //可以不要break,也可以写上
...
case 标签2:
...
default: //可省略
...
}

● 必须包含所有情况

● 条件可以使数值,字符串,其他类型

如果想要执行完case下沿继续运行,用fallthrough

● 实数有误差,避免使用

● 重叠式上方的优先

 带标签的循环
标签1: while 条件 { // 例
标签2: for i in sampleData {
...
break 标签1
...
}
...
continue 标签2
...
}

● 在for/while/repeat-while前加上标签

● continue/break 指定标签,不指定为当前的循环_

 带标签的if , switch

标签1 : if 条件 {
标签2: if 条件 {
...
break 标签1
} else {
...
}
}

● 只能用break, 不能用continue(用了跳出当前循环, 没有循环会报错)

 独立代码块

do {
...
}

● 可以带标签, 跳出只能用break

● 就是例外处理的do-catch的do

 简单的运行方法 
 playground  File>New>Playground
 命令行  略 # TODO: Supply [命令行下的swift运行 p36]
   
   
   
   
   
   
   
   

Swift4 基础的更多相关文章

  1. Swift4 函数, 元组, 运算符

    创建: 2018/02/19 完成: 2018/02/19 更新: 2018/02/25 修改标题 [Swift4 函数] -> [Swift4 函数, 元组, 运算符] 更新 :2018/03 ...

  2. Swift4.0复习特性、编译标志和检查API的可用性

    1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...

  3. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  4. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  7. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  8. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  9. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

随机推荐

  1. 无向图生成树计数 基尔霍夫矩阵 SPOJ Highways

    基尔霍夫矩阵 https://blog.csdn.net/w4149/article/details/77387045 https://blog.csdn.net/qq_29963431/articl ...

  2. HDU 4193 Non-negative Partial Sums【单调队列】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题意: 给定序列,可以把后面的连续的部分移到最前面来,问多少种移法使得最终得到的序列的前i项和 ...

  3. 洛谷——P2872 [USACO07DEC]道路建设Building Roads

    P2872 [USACO07DEC]道路建设Building Roads 题目描述 Farmer John had just acquired several new farms! He wants ...

  4. ArcEngine影像图配准

    转自原文ArcEngine影像图配准 影像图配准主要包括以下几个方面 1.打开影像图 2.配准 3.影像图入库/保存 1.打开影像图的代码以前已经写过了. 2.配准   配准 主要使用IGeoRefe ...

  5. CheckStyle: 解决Unicode导致LineLength出错的问题

    在checkstyle.xml中,加上如下代码: <?xml version="1.0" encoding="UTF-8"?> <module ...

  6. Linux源代码分析工具-Source Insight

    下载地址:http://www.sourceinsight.com/down35.html 可用注冊码:SI3US-205035-36448 使用说明:http://wenku.baidu.com/v ...

  7. FTRL (Follow-the-regularized-Leader)算法

    Online gradient descent(OGD) produces excellent prediction accuracy with a minimum of computing reso ...

  8. Java同步锁何时释放?

    在测试java多线程中有关 “生产者和消费者” 这个经典问题的时候,写代码测试的时候,思考到一些问题(所以还是要动手,实践才能储真知啊), synchronize 同步锁何时释放,何时获得?重新获得锁 ...

  9. 跟着9张思维导图学JavaScript

    思维导图小tips 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...

  10. 高端技巧:怎样使用#define定义变量

    Introduction 想在源文件里定义一个跟行号有关的变量,每次都手动输入实在是太慢了.本文介绍怎样使用宏定义来定义与行号有关的变量. 比如:我们想在源码的第10行定义A_10这种一个整形变量. ...