第十九次课oc总结下次预习swift_第1页
第十九次课oc总结下次预习swift_第2页
第十九次课oc总结下次预习swift_第3页
第十九次课oc总结下次预习swift_第4页
第十九次课oc总结下次预习swift_第5页
已阅读5页,还剩43页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Swift语言简介什么是SwiftSwift是苹果公司在2014年WWDC上发面的全新编程语言,在国内叫雨燕。和OC一样,可以用来开发IOS,mac应用程序。苹果公司经4年完成Swift.

语法特点

集中了很多语言的优点,像OC,JavaScript,C#,Python。所以具备编译型语言的高性能和脚本语言的灵活交互性。更简单,更高效,更稳定。数据

使用Swift开发条件:Xcode版本=>6.0,Mac系统版本=>10.9.3

Swift的首席架构师:Chrislattner性能测评

在进行复杂对象排序时

OC的性能是Python的2.8位,Swift的性能是Python的3.9倍。在实现RC4加密算法时

OC的性能是Python的128位,Swift的性能是Python的220倍。编程思想

Swift一出,我们IOS是不是多要重新学?

个人观点:

1.使用用OC现在更占优势

2.OC和Swift天发IOS程序,思路和步骤,框架,没变,只是些语法结构变了。

语法须知Swift的源文件拓展名是.swift2个不需要

不需要写main函数

从上往下按顺序执行,所以最前面的代码会被自动当做程序的入口

不需要在每一条语句后面加上分号

leti=10(也可以加上)leti=10;

有一种情况必须加分号:同一行代码上有多条语句时

leti=10;letj=10

注释注释

单行注释

//leti=10

多行注释

/*

这是多行注释

leti=10*/多行注释可以嵌套多行注释

/*外层注释

/*

这是多行注释

leti=10*/外层注释*/变量和常量变量和常量的声明用let来声明常量

leti=10

用var来声明变量

varage=20

varname=“xiaoming”,i=

0.0实例数据类型Swift中常用的数据类型有Int,Float,Double,Bool,Character,StringArray,Dictionary,元组类型(Tuple),可选类型(Opptional)

可以看出,数据类型的首字母都是大写的如何指定变量\常量的数据类型在常量\变量名后百加上冒号(:)和类型名称

letage:Int

=10上面的代码表示:定义一个Int类型的常量age,初始值是10一般来说,没有必要明确指定变量\常量如果在声明常量\变量时赋了初始值,Swift可以自动推断出这个常量\变量的类型

letage=10swift会推断出age是Int类型,因为20是个整数变量的初始化Swift严格要发变量在使用这前必须进行初始化下面的代码是错误的

vara:Int

letc=a+10

第1行代码中:Swift并不会为变量a赋初值,a没有初始化第2行代码会报错下面的代码是正确的

vara:Int=20

letc=a+10整数整数分为2种类型

有符号(signed):正、负、零无符号(unsigned):正、零Swift提供了8、16、32、64位的有符号整数,比如

UInt8:8位无符号整型

Int32:32位有符号整型

Int8、Int16、Int32、Int64、UInt8、Uint16、UInt32、UInt64最值

可以通过min和max属性来获取某个类型的最小值和最大值

1.letminValue=UInt8.min2.letmaxValue=UInt8.maxSwift提供了多种字节长度的整数,建议在定义变量的时候别考虑有无符号、长度的问题,尽量的用Int.Swift是一门严格要求类型的语言,像Int8的变量和Int16的是不能相加,声明变量是要注意范围,超出范围会编绎报错整数整数的4种表达形式

十进制数:没有前缀

letx1=10

二进制娄:以0b为前缀

letx2=0b1010

八进制数:以0oo前缀

letx3=0b12

十六进制数:以0x为前缀

letx4=0xA浮点数浮点娄,就是小数,Swift提供了两种浮点娄类型

Double:64位浮点数,当浮点值非常大或需要非常精确时使用此类型

Float:32位浮点数,当浮点值不需要Double的时候使用此类型

精确程度

Double:至少15位小数

Float:至少6位小数如果没有明确说明类型,浮点数就是Double类型

letnum=0.14数字格式数字可以增加额外的格式,使它们更容易阅读可以增加窗外的零01.letmoney=002562.letI2=005452.00

可以增加额外的下划线_,以增强可主动性

1.letone=1_000_0002.lettwo=100_00003.letthree=1_000_000.00_0002

增加了额外的零和下划线,并不会影响原来的数值大小类型转换两个类型不相同的数值,是不能直接进行运算的

下面的语句是错误的

1.letnum1:UInt8=102.letnum2:Int=20

3.sum:Int=num1+num2

第3行报错,类型不同解决方案:将num1转为Int类型,就能与num2进行相加

letsum:Int=Int(num1)+num2思考:letsum=3+0.14是正确的吗?类型别名可以使用typealias关键字定义类型的别名,跟C语言的typedef作用类似

typealiasmyInt=Int原类型名称能用在什么地方,别名就能用在什么地方

声明\常量类型

letnum:MyInt=20

获得类型的最值

letminValue=MyInt.min

类型转换

letnum=-MyInt(.014)字符串字符串是String类型的数据,用双引号””包住文字内容letwebsite=“”字符串的觉的操作用加号+做字符串拼接1.letscheme=http://2.letpath=“”3.letwebsite=scheme+path用斜线\和小括号()做字符串插值1.lethand=22.letage=203.letstr=“我今年\(age)岁了,有\(hand)只手”运算符Swiift所支持的部分运算符有赋值运算符:=

复合赋值运算符:+=、-=

算术运算符:+、-、*、/

求余运算:%

自增、自减运算符:++、--

比较运算符:==、!=、>、<、>=、<=

逻辑运算符:&&、||、!三目运算符:?:

范围运算符:..<、…

溢出运算符:&+、&-、&*、&/、&%赋值运算符1对1赋值

1.vara=52.letb=20N对N赋值

let(x,y)=(1,2)跟C\OC不一样的是:Swift的赋值运算符没有返回值

if(x=y){}

这个在OC里不报错,在Swift里是错的这样的好处是防止误用=和==求余运算符%在Swift中叫“求余运算符”,也叫“模运算符”

9%4=1-9%4=-19%-4=1-9%-4=-1

求余结果的正负跟%左边数值的正负一样跟C语言不一样的是,Swift的%支持浮点娄的计算

8%2.5=0.5范围运算符范围去处符用来表示一个范围,有2种类型的范围运算符闭合范围运算符:a…b,表示[a,b],包含a和b

半闭合范围运算符:a..<b,表示[a,b),包含a,不包含b例子

1.forindexin1…5{println(index)}index的值从1~52.forindexin1..<5{println(index)}index的值从1~4溢出运算符每种数据类型都有自己的取值范围,默认情况下,一旦赋了一个超出取值范围的数值,会产生编译或者运行时错误.

下面的写法是错误的

letx=UInt8.maxlety=x+1

第2行代码会在运行时报错Swift为整型计算提供了5个&开头的溢出运算符,能对超出取值进行灵活处理溢出加法&+

溢出减法&-

溢出乘法&*

举出除法&/无符号值的上/下溢出上溢出

letx=UInt8.maxlety=x&+1

第1行代码过后:x的值是255x=0b1111_1111

第2行代码过后:y的值是0y=0b1111_1111+0b0000_0001=1_0000_0000下溢出

letx=UInt8.minlety=x&-1

结果是多小呢?有符号值的上/下溢出上溢出

letx=Int8.maxlety=x&+1

第1行代码过后:x的值是127x=0b0111_1111

第2行代码过后:y的值是-128y=0b0111_1111+0b0000_0001=1_0000_0000下溢出

letx=UInt8.minlety=x&-1

结果是多小呢?除0溢出默认情况下,一个数除以0,或者对0求余数,编译器会直接报错

letx=10lety=x/0letz=x%0

第2,3行代码:编译器都会报错如果使用溢出运算符,就不会报错

letx=10lety=x&/0letz=x&%0y和z的值最终都是0元组类型什么是元组类型元组类型由N个任意类型的数据组成(N》=0)组成元组类型的数据可以称为“元素”

letposition=(x:10.5,y:20)

//position有2个元素,x,y是元素的名称

letperson=(name:”jack”)

//person只有name一个元素

letdata=()元素的访问例子

varposition=(x:10.5,y:20)

使用元素名称

letx=position.x

使用元素位置

lety=position.1注意如果let来定义一个元组,那么就是常量,就无法修改它的元素。元组的输出可以输出整个元组来查看所有元素的值

1.varpoint=(x:10.5,y:20)2.point.x=303.point.1=504.println(point)

输出结果是(30.0,50)元组使用细节可以省略元素名称

letposition=(10,20)letperson=(20,”jack”)可以明确指定元素的类型、

varperson(Int,String)=(23,”rose”)person的第0个元素只是Int类型,第1个元素只能是String类型注意在明确指定元素类型的情况下不能加上元素名称因此,下面的语句是错误的

varperson(Int,String)=(age:23,name:“jack”)元组使用细节可以多个变量接收元组数据

var(x,y)=(10,20)varpoint=(x,y)可以将元素分别赋值给多个变量

varpoint=(10,20)var(x,y)=point可以使用下划线_忽略某个元素的值,取出其它元素的值

varperson=(20,”jack”)var(_,name)=person流程控制Swift支持的流程结构循环结构:for、for-in、while、do-while

选择结构:if、switch

注意:这引起语句后面一定要跟上大括号{}跟c语言对比用法基本一样的有:for、while、do-while、if

因此只需要关注for-in和switch即可For--inFor—in和范围运算符

forIin1..3{println(i)}

按顺序从范围中取值赋值给i,每取1次值,就执行1次循环体范围的长度就是循环体执行的次数如果不需要用到范围中的值,可以使用下划线_进行忽略

for_in1..3{println(“*******”)}switchSwitch语句在Swift和OC的区别在以语言中如果case的结尾没有break,就会接着执行下一个case

在Swift中

不需要在每个case后面增加break,执行完case对应的代码后默认会自动退出switch语句。

case后面可以赶写多个匹配条件,条件用副号分开

case后面可以赶写一个范围作为匹配条件注意在每个case后面必须有一个可执行语句

switch要保证处理所有可能的情况,不然编译器直接报错因此defarlt一定要加,不然就出现一些处理不到的情况

switchCase还可以用来匹配元组

letpoint(1,1)switchpoint{case(0,0):println(“这个点在原点上”)case(_,0):println(“这个点在X轴上”)case(0,_):println(“这个点在Y轴上”)case(-2..2,-2..2):println(“这个点在矩形内”)default:switch在case匹配的同时,可以将switch中的值绑定给一个特定的常量或者变量,以便在case后面的语句中使用

letpoint=(10,0)switchpoint{case(letx,0):println(“这个点在x轴上,X值是\(x)”)case(0,lety):println(“这个点在Y轴上,y值是\(y)”)caselet(lx,y):println(“这个点的x值是\(x),y值是\(y)}switchSwitch语句可以使用where来增加判断的条件

letpoint=(10,-10)switchpoint{caselet(x,y)wherex==y:println(“x=y”)caselet(x,y)wherex==-y:println(“x==-y”)default:println(“|x|!=|y|”)}fallthrouh的作用执行完当前case后,会接着执行fallthrough后面的case或者default语句标签使用标签的其中1个作用:可以用于明确指定要退出哪个循环

out:for_in1…2{for_in1..3{println(“内循环”)breakout}println(“外循环”)

}函数的定义函数的定义格式

func函数名(形参列表)->返回类型{

//函数体}形参列表的格式形参名1:形参类型1,形参名2:形参类型2,...没有返回值的函数如果函数没有返回值,有3种写法

func函数名(形参列表)->Void{

//函数体}

func函数名(形参列表)->(){

//函数体}

func函数名(形参列表){

//函数体}没有形参函数一个函数如果没有形参,函数名后面的小括号也不能

func函数名()->Int{

//函数体

}

上面的函数没有形参,返回值是Int类型返回元组的函数一个函数也可以返回元组数据

1.funcfind(id:Int)->(name:String,age:Int){ifid>0{return(“jack”,20)}else{return(“nobody”,0)}}varpeople=find(2)println(“name=\(),age=\(people.age)”)

猜猜结果?外部参数名一般情况下,通过形式参数的名字,就能推断出这个参数的含义和作用

funcaddStudent(name:String,age:Int,no:Int){println(:添加学生:name=\(name),age-\(age),no=\(no):)}

在函数内部一看参数名就知道这3个参数的作用但是,形式参数是用在函数内部的,当调用函数时就看不见形参的名字,有可能导致以后会不太明白每个参数的含义

addStudent(“jack”,20,19)

一眼看去,就猜出第1一个参数“jack”是指姓名,后面的20、19分别代表什么含义

为了解决上述问题,Swift提供外部参数名语法

外部参数名可以在调用函数时提醒每个参数的含义外部参数名的使用例子

funcsum(number1num1:Int,number2num2:Int)->Int{returnnum1+num2}Sum(number1:10,number2:20)注意一旦定义了外部参数名,在调用函数时就必须加上名部参数名使用#能简化外部参数名的定义

funcsum(#num1:Int,#num2:Int){returnnum1+num2}

第1行代码的意思:num1\num2即是形式参数名,以是名部参数名

sum(num1:10,num2:20)默认参数值可以在定义函数时,给形参指定一个默认值,调用函数时,就可以不用给这个形参全传值

funcaddStudent(name:String,age:Int=20){println(“添加1个学t生name=\(name),age=\(age)”)

addStudent(“jack”)age参数有个默认值20,所以第4行调用函数时可以不传值给age参数输出结果是添加1个学生:name=jack,age=20默认参数值带有参数值的形参,Swift会自动给它生成一个中形参名相同的外部参数名

age:Int=20相当于#age:Int=20

因此,如果要传入age参数值时,只能这么调用

addStudent(“jack”,age:25)在带有默认参数值的参数名前加个下划线_,高用函数时就不用写外部参数名

funcaddStudent(name:Stri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论