笔记正文:
2010年7月开始设计,2014年wwdc(苹果开发者大会)上发布,译为:“雨燕”,能够跟object-c同样,用于开发iOS,Mac应用程序。
特色:
从中能够看到Objective-C,JavaScript,C#,Python等语言的影子;
借鉴了上面这些语言的优势;
同时具有编译型语言的高性能和脚本语言的灵活交互性;
能够轻松地与Objective-C、C混合使用(相互调用)。
开发的目的:取代Objective-C;让应用开发更简单、更高效、更稳定。
相关数据:
使用Swift语言开发的条件是什么:
Xcode版本>=6.0;
Mac版本>=10.9.3
Swift自从发布以后,备受开发者关注,发布当天(1天的时间内)
Xcode 6 beta下载量突破1400万次;
官方发布的电子书《The Swift Prongramming Language》下载量突破37万次;
一个国外开发者使用Swift实现了Flappy Bird游戏(这位开发者上手Swift的时间只有4个小时,编程加上休息时间,接近9个小时)。
相关人物:Chris Lattner
Swift的首席架构师;LLVM项目的主要发起人与做者之一;Clang编译器的做者;苹果[开发工具]部门的主管;领导Xcode、Instruments和编译器团队;2010年7月开始住到开发Swift编程语言;Swift的大部分基础架构均由他1人完成。 ————大神中的大神
性能:
官方给出的是性能很是好,可是对此表示怀疑???
忠告:
目前的性能不是卡开发者最须要担忧的问题;
苹果已经全盘掌握了这个语言的方方面面:从底层编译框架再到语言设计;
优化之路才刚刚开始,做为开发者,须要给这门新语言一点点耐心和信心
Swift和Objective-C代码格式对比
添加一个按钮为例:
Objective-C
1.UIButton *btn = [[UIButton alloc] init];
2.btn.frame = CGRectMake (20,20,20,20);
3.btn.backgoundColor = [UIColor blueColor];
4.[self.view addSubview:btn];
Swift:
1.var btn = UIButton()
2.btn.frame = CGRectMake (20,20,20,20)
3.btn.backgoundColor = UIColor.blueColor()
4.self.view addSubview(btn)
使用,学习Swift:
从学习Swift的语言角度看:
Swift是一门新语言,语法难度对每一个程序员都差很少;
从使用Swift开发iOS程序的角度看:
使用Object-C的老牌iOS程序员更占优点;
由于从Object-C转为Swift去开发iOS程序,仅仅是书写的格式变换了,iOS开发的步骤、思想、框架都没有改变。
1、Swift变量和常量<语法须知>
Swift的源文件扩展名是.swift
2个不须要:
不须要编写main函数(默认从上往下按顺序执行,因此最前面的代码会被自动看成程序的入口);
不须要在每一条雨具后面加上分号(喜欢的话加上也是能够的;有一种状况必须加分号:同一行代码上有多条语句时);
注释:
单行注释:// 单行注释
多行注释:/* 多行注释 */
注:多行注释能够嵌套多行注释 (C和OC中这样是会报错的):
/* 外层注释
/* 内层注释
多行注释 */
外层注释 */
常量和变量
如何声明常量和变量:
用let来声明常量:let radius = 10
用var来声明变量:1.var age = 20 2.var x = 0.0,y = 0.0,z = 0.0
PlayGroud的使用:
Xcode自带的一个工具,能够在屏幕右边框内直接看到左边代码的执行结果,点后边的加号能够在下边更加直观的显示,UI也能够。(练习的时候可使用,仍是挺好的)。
字符串:
字符串是String类型的数据,用双引号“”包住文字内容
let website = "http://ios.itcast.cn”
字符串的常见操做:
用加号+作字符串拼接
1.let scheme = “http://“
2.let path = “iOS.itcast.cn”
3.let website = scheme + path //website的内容是: "http://ios.itcast.cn”
用反斜线\和小括号()作字符串插值(把常量\变量插入到字符串中)
1.let hand = 2
2.var age = 20
3.let str = “我今年\(age)岁了,有\(hand)只手” //str的内容是:“我今年20岁了,有2只手”。
整数转成字符串:var str = String(age);var str2 = “\(age)”;这两种方法均可以。
打印输出:Swift提供了2个打印输出函数
println:输出内容后会自动换行;
print:对比println,少了个自动换行的功能;
常量和变量的命名:
基本上能够用任何你喜欢的字符来做为常量和变量名
1.let 网址 = “http://ios.itcast.cn”
2.let 🐶🐮 = “小狗和母牛”
🐶和🐮是emoji表情,是一种特殊的Unicode字符;
能够在Mac上经过快捷键:control + command + 空格,弹出emoji键盘;
常量和变量名的注意点:
不能包含数学符号(好比 +、-、*、\);
不能包含箭头(好比←、→、↑、↓)
不能包含非法无效的Unicode字符(好比⚽️)
不能是关键字(好比let、var)
不能以数字开头(好比123go)
不能是单独一个下划线_ (好比var _ = 10)
数据类型:
Swift中经常使用的数据类型有:
Int Float Double Bool Character String
Array Dictionary 元组类型(Tuple) 可选类型(Optinal)
能够看出:数据类型的首字母都是大写的
如何指定变量\常量的数据类型
在常量\变量名后面加上 冒号(:)和类型名称
let age: Int = 10
上面代码表示:定义了一个Int类型的常量age,初始值是10
通常来讲,没有必要明确指定变量\常量的类型
若是在声明常量\变量时赋了初始值,Swift能够自动推断出这个常量\变量的类型
let age = 20
//Swift会推断出age是Int类型,由于20是个整数
变量的初始化:
Swift严格要求变量在使用以前必须进行初始化
下面代码是错误的
1.var a: Int
2.let c = a + 10
解析:1>第1行代码中:Swift并不会为变量a赋初值,a没有初始化
2>第2行代码会报错
下面代码是正确的
1.var a: Int = 20
2.let c = a + 10
整数:
整数分为2种类型:
有符号(signed):正、负、零
无符号(unsigned):正、零
Swift提供了八、1六、3二、64位的有符号和无符号整数,好比
UInt8:8位无符号整型
Int32:32位有符号整型
Int八、Int1六、Int3二、Int6四、
UInt八、UInt1六、UInt3二、UInt64
最值:
能够经过min和max属性来获取某个类型的最小值和最大值
1.let minValue = UInt8.min 最小值等于0
2.let maxValue = UInt8.max 最大者等于255
Int和UInt
Swift还提供了特殊的有符号整数类型Int和无符号整数类型UInt
Int\UInt的长度和当前系统平台同样
>在32位系统平台上,Int和UInt的长度是32位
>在64位系统平台上,Int和UInt的长度是64位
Int在32位系统平台的取值范围:-214783648~214783647
建议:
在定义变量时,别老是在考虑有无符号、数据长度的问题
尽可能使用Int,这样能够保证代码的简介、可复用性。
存储范围:
每种数据类型都有泽子的存储范围,好比:
Int8的存储范围是:-128~127
UInt8的存储范围是:0~255
若是数值超过了存储范围,编译器会直接报错
下面的语句都会直接报错
1.let num1: UInt8 = -1
2.let num2: Int8 = Int8.max + 1
第1行代码报错缘由:UInt8不能存储负数
第2行代码报错缘由:Int8能存储的最大值是Int8.max
整数的表示形式:
十进制数:没有前缀
let i1 = 10 //10
二进制数:以0b为前缀
let i2 = 0b1010 //10
八进制数:以0o为前缀
let i3 = 0o12 //10
十六进制数:以0x为前缀
let i4 = 0xA //10
浮点数:
浮点数,就是小数。
Swift提供了两种浮点数类型
Double:64位浮点数,当浮点值很是大或须要很是精确时使用此类型
Float:32位浮点数,当浮点值不须要使用Double的时候使用此类型
精确程度
Double:至少15位小数
Float:至少6位小数
若是没有明确说明类型,浮点数默认就是Double类型
let num = 0.14 //num是Double类型的常量
浮点数的表示形式
浮点数可使用十进制和十六进制2中进制来表示
十进制(没有前缀)
没有指数:let d1 = 12.5
有指数:let d2 = 0.125e2
//0.125e2 == 0.125 * 10² MeN ==M * 10的N次方
十六进制(以0x为前缀,且必定要有指数)
let d3 = 0xC.8p0
//0xC.8p0 == 0xC.8 * 2º == 12.5 * 1 0xMpN == 0xM * 2的N次方
let d3 = 0xC.8p1
//0xC.8p1 == 0xC.8 * 2^1== 12.5 * 2 == 25.0
数字格式:
数字能够增长额外的格式,使它们更容易阅读
能够增长额外的零 0
1.let money = 0019999 //1999
2.let money2 = 001999.000 //1999.0
能够增长额外的下划线_,以增长可读性
1.let oneMillion1 = 1_000_000 //1000000
2.let oneMillion2 = 100_0000 //1000000
3.let overOneMillion = 1_000_000.000_001 //1000000.000001
增长了额外的零 0和下划线_,并不会影响原来的数值大小。
类型转换
两个类型不相同的数值,是不能直接进行运算的
下面的语句是错误的
1.let num1:UInt8 = 10
2.let num2:Int = 20
3.let sum :Int = num1 + num2(×) 改正:let sum :Int = Int(num1) + num2(√)
第3行会报错
报错缘由:num1是UInt8类型,num2是类型Int,类型不一样,不能相加
解决方案:将num1转为Int类型,就能与num2进行相加
下面的语句是错误的
1.let num1 = 3
2.let num2 = 0.14
3.let sum = num1 + num2(×) 改正:let sum = Double(num1) + num2(√)
第3行会报错
报错缘由:num1是Int类型,num2是类型Double,类型不一样,不能相加
解决方案:将num1转为Double类型,就能与num2进行相加
注意:下面的写法是正确的
let sum = 3 + 0.14
➹ 3和0.14相加获得结果3.14,等赋值之后,编译器才会自动推断出sum是Double类型
类型别名
可使用typealias关键字定义类型的别名,跟C语言的typedef做用相似
typealias MyInt = Int //给Int类型起了个别名叫作MyInt
原类型名称能用在什么地方,别名就能用在什么地方
声明变量\常量类型
let num:MyInt = 20
得到类型的最值
let minValue = MyInt.min
类型转换
let num = MyInt(3.14) //3