Swift入门(一)

相信很多新手开始学习Swift的时候都会有点无所适从,下面总结了一些初学者需要了解和注意的地方供大家参考和学习.

一.与OC的差别

1.程序入口:AppDelegate里面的UIApplicationMain

2.创建一个类只创建一个文件以.swift结尾

3.OC以@interface开始@end结束Swift以大括号{}开始和结束

4.OC一行代码以;结束swift以换行结尾没有分号(但加分号之后也不报错)

二.创建对象

1..OC创建视图(对象)用alloc init   swift采用()来创建对象

2.OC采用initWithxxx   swift采用(xxx:)

3.修改背景颜色[UIcolor redColor]  swift里面UIcolor.redColor

4.=左右两边都要有空格

5.Oc添加视图self.view addsubview  swift里可以不写self但写了也不报错(有一个地方进行比较----闭包)

6.Oc里枚举是全的swift中采用类型.样式的形式

7.Oc打印NSlog  swift中得枚举可以直接省略前面的类型(注意:省略类型后,后面的提示有时候不好)  print执行效率比Nslog高

8.打印print(已经可以直接换行,从网上搜得好多资料说println才能换行,print不能,应该是之前的版本,swift2.0已经修改了)

同时注意print的使用:print("\(变量)")

三.swift语法

1.let定义常量赋值之后不能改变

2.var定义变量

注意:

1>swift里的自动推导:变量/常量依据等号右边的值自动推导出变量/常量的类型

2>查看类型optional + click

3>不同类型之间不能直接运算(ocint+ folat有隐式转换,会将低精度的int自动转为float  但是,swift只有强制转换)

强制转换两种方式:1.不采用自动推导--->在变量名后面指定类型let a:Double =10

2.采用 类型(变量名)实现强制转换

letnumber =10

letnum =Double(number)

print(num)//10.0

建议优先定义let,如果有需要,再改成var

四.可选项

1.可选项有可能有值,也有可能没有值

2.可选项不能直接运算若要直接运算的话,需要强制解包

3.可选项是swift特有的.

4.什么是可选项?在变量/常量后面加一个?就是一个可选项.

leta :Int? =10(常量的可选项必须赋值,否则后面打印也会报错)

ler.swift:21:15: Constant 'a' used before being initialized--->初始化之前就使用了

5.可选项的默认值为nil

6.强制解包在可选项后面加!就是强制解包(注意!前面没有空格)

7.强制解包存在一定的风险

8.报错

unexpectedly found nil while unwrapping an Optional value

强行解包的变量没有值,就会报此错误,因此一定要考虑清楚是否能够直接进行强制解包

9.苹果为我们提供了一种新的方式: ??

??会判断你前面的可选项是否为nil若为nil则取??后面的值若不为nil则对??前面的可选项进行解包操作

示例:

//可选项变量值为nil,??取后面的值

varnumber :Int?

letresult = (number ??0) +5

print(result)//打印结果为5

//可选项变量的值不为nil,取??前可选项解包后的值

varnumber1 :Int? =10

letresult1 = (number1 ??0) +5

print(result1)//打印结果为15

五.if语句

command+波浪线切换工程

Oc里面有非零即真概念

1.swift没有非零即真的概念

2.if后面的()可以省略

3.但是{}不可以省略

4.三目运算符a?(b):(c)三目运算符在oc和swift里面一样

示例:

//1.if

leta =10

ifa >=10{

print("\(a)")

}elseifa <19{

print("111")

}

//2.三目运算

letb =10

letc =20

letd = b > c ? b : c

print("\(d)")

六.if let语法

1.用于判断可选项

iflet新的变量名=可选项{

新变量名的作用域:新变量名不是可选项

}

若新变量名有值(对可选项进行的一个解包),则运行if后面{}的值;

若新变量名没有值则不执行

多个变量判断,用逗号隔开.

2.iflet后面可以加where条件判断语句,用于判断新变量名是否符合要求;注意where后面没有智能提示

多个变量用,分开进行判断

示例:

leturlStr ="www.baidu.com"

leturl =NSURL(string: urlStr)

//if let语句,若新变量不为nil,则执行{}

ifletoUrl = url{

letrequest =NSURLRequest(URL: oUrl)

print(request)

}

七.guard let

1.guard let与iflet相反

guard let新变量名=可选项else{

return

}

新变量名的作用域

若新变量有值则不运行else后面{}里的代码

若新变量名没有值,(可选项为nil)则运行else后面{}的代码

多个变量可以用,隔开,只有两个变量都有值才走后面的代码

示例:

leturlStr ="www.baidu.com"

leturl =NSURL(string: urlStr)

//guard let语句,若新变量为nil,则执行{},不为nil则执行{}后面的语句

guardletoUrl = urlelse{

return

}

letrequest =NSURLRequest(URL: oUrl)

print(request)

八.switch

oc中只能为常量

1.swift不仅局限于整型,字符串等其他类型

2.case后面可以不加break但是必须要有一条可执行的语句

3.当switch把所有的情况到考虑到的时候(例如:枚举的类型),可以省略default(没考虑到必须加)

示例一:

//switch语句

letscore =89

switchscore/10{

case6:

break

case7:

print("及格")

case8:

print("良好")

case9:

break

default:

break

}

示例二:

//定义一个枚举的类型

enumScoreType:String{

caseTypeGood ="优"

caseTypeMiddle ="良好"

}

//定义一个变量

lettype :ScoreType= .TypeGood

//用switch(里面的case为枚举的两种类型,因为考虑到了全部的两种情况,所以可以不写default)

switchtype{

case.TypeGood:

print("优")

case.TypeMiddle:

print("良好")

}

九.for循环

1.for iint0...10{

print(i)//打印0到10共11个

}

2.for iint0..<10{

print(i)//打印0到9共10个

}

系统检测到let a没有被使用建议改为_这个_可以理解为忽略

十.字符串string类型

1.NSSring继承自NSObject的对象swift中String是结构体(运行效率高一点)

2.可以相互转换

一个中文占3个字节

3.字符串拼接

1> +(加号)拼接

2>print("\(str)便是晴天")"\(变量名)拼接的内容"

4.格式化字符串string(format:...)

示例:

//格式化字符串

leth =05

letm =06

lets =07

letstr1 =String(format:"%02d:%02d:%02d", arguments: [h,m,s])

print(str1)//打印结果:05:06:07

5.截取字符串:swift的截取字符串使用起来并没有OC的灵活和方便,所以可以将String转化为NSString来进行字符串的截取

示例:

//截取字符串swift风格的

//str = "你若安好,便是晴天"

letstartIndex = str.startIndex

letendIndex ="123".endIndex//此处的123为占位符(即换为任意的字符都可以,只是用来计算长度的)

letsubStr = str.substringWithRange(startIndex..

print(subStr)//打印结果:你若安

//截取字符串OC风格的

letsubStr1 = (strasNSString).substringWithRange(NSMakeRange(0,5))

print(subStr1)//打印结果:你若安好,

十一.集合:数组字典

一)数组用[]存放

2.let定义数组不可变var定义的数组可变

3.只能添加相同数据类型

4.若要添加不同类型强制指定为NSObject(oc的)也可以AnyObject(协议)[swift的]

ps:NSObject的父类也是一个协议

5.数组初始化[类型]()

6.合并数组+

注意:只能对相同类型的数组才能合并.

7.删除数据

1>removeAll   ------>删除后内存没有了

2>removeAll(keepCapacity:true)-->删除后内存还在

3>removeFirst/AtIndex删除第一个/指定元素

4>let value result[3]获取指定索引的数据

示例:

//数组

//新建一个数组并指定其元素的类型

vararray = [1,2,3,4,5]

//追加元素

array.append(6)

//打印结果

print(array)//打印结果[1, 2, 3, 4, 5, 6]

//新建一个数组并指定其元素的类型

vartemp: [AnyObject] = [AnyObject]()

//追加元素

temp.append("你若安好")

vartemp1:[AnyObject] = [AnyObject]()

temp1.append("便是晴天")

temp1.append(0)

//数组的合并相同类型的数组可以直接用+来实现

varresult = temp + temp1

print(result)//打印结果:[你若安好,便是晴天]

//不同类型的数组可以遍历其中一个来实现

forvalueinarray {

result.append(value)

}

print(result)//打印结果:[你若安好,便是晴天, 1, 2, 3, 4, 5, 6]

//删除数组的元素

result.removeFirst()

print(result)//打印结果:[便是晴天, 1, 2, 3, 4, 5, 6]

//删除全部元素

//对于打印结果的说明:在64之前,打印的是8的指数,例如有3个元素,打印8;有10个元素,打印16,但超过之后就没有规律了

print(result.capacity)//打印结果8

//数组名.removeAll(keepCapacity: true),

//此处为true,则删除所有的数据之后,内存还保留

//此处为false,则删除所有的数据之后,内存不再进行保留

result.removeAll(keepCapacity:true)

print(result.capacity)//打印结果:8

result.removeAll()

print(result.capacity)//打印结果:0

二)字典

1.键值对["key": value](key一般是string value不一定)

2.可变字典var ;不可变字典let

3.添加数据字典名["name"] ="it"

4.若key值不存在直接添加数据;若key已经存在,则赋值会替换原来的值.

5.若想删除字典的某一个key值,直接给key的值赋为nil就可以了.

6.若指定了字典的值的类型,必须是相同的类型才能赋值.想给字典添加其他的数据类型,需要在初始化的时候指定value的值的类型为AnyObject

7.对字典进行遍历fordicinnewDict{

print(dic)

}

8.字典的合并

把dict合并到newDict-->遍历dict,将其元素添加到newDict

示例:

//新建一个字典["key":value]

vardict = ["key":"value"]

//给字典赋值,若key不存在,则直接添加

dict["name"] ="果而"

print(dict)//打印结果:["key": "value", "name": "果而"]

//给字典赋值,若key存在,则会覆盖原来的值

dict["name"] ="贝尔"

print(dict)//打印结果:["key": "value", "name": "贝尔"]

//若想要删除字典的元素,则将key对应的value设置为nil即可

dict["name"] =nil

print(dict)//打印结果:["key": "value"]

//若要给字典添加不同类型的元素,需要将字典设置类型

varnewDict:[String:AnyObject] = [String:AnyObject]()

newDict["name"] ="史努比"

newDict["age"] =2

print(newDict)//打印结果:["age": 2, "name":史努比]

//字典的合并,遍历一个字典,将其元素添加到另一个字典中

//字典的遍历(注意key和value只是一个占位符)

for(key,value)indict{

print("字典的key为:\(key),value为:\(value)")

}

//字典的合并

for(key,value)indict{

newDict[key] = value

}

print(newDict)//打印结果为:["age": 2, "key": value, "name":史努比]

十二.函数

1.函数的格式: func函数名(参数名1:参数类型,...) ->返回值类型{函数的代码}

2.函数的参数说明

3.函数的返回值

大部分函数返回值为空swift有3种返回值为空的形式

示例:

//函数

//第一个参数只是一个标记,在给函数参数的时候的提示

funcsum(第一个参数num1:Int, num2:Int) ->Int{

returnnum1 + num2

}

//函数返回值为空的三种写法

funcdemo1(){

print("返回值为空")

}

funcdemo2() ->(){

print("返回值为空")

}

funcdemo3() ->Void{

print("返回值为空")

}

你可能感兴趣的:(Swift入门(一))