一、Swift 介绍
Swift是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序。
Swift 使用
自动引用计数
(Automatic Reference Counting, ARC)来简化内存管理Swift Foundation框架可无缝对接现有的
Cocoa 框架
,并且兼容 Objective-C
代码,支持面向过程
编程和面向对象
编程,Swift也是一门类型安全的语言。Swift中范型是用来使代码能安全工作,可以在函数数据和普通数据类型中使用,例如类、结构体或枚举。范型可以解决代码复用的问题
//举个简单例子:这两个方法很类似,主要就一个参数类型的区别。
func isIntEqual(x:Int,y:Int) -> Bool {
return x == y
}
func isStringEqual(x:String,y:String) -> Bool {
return x == y
}
//我们可以利用范型合并一下:
func isObjEqual<T:Equatable>(x:T,y:T) -> Bool {
return x == y
}
- Swift的访问权限变更(新增了两种访问权限,权限更细化)
访问权限 由大到小 依次为:open,public,internal(默认),fileprivate,private
二、Swift 优点
1、 简洁的语法,性能较好
swift语言比OC精简,整个项目中丢掉了.h
头文件,以及头文件
的引入。性能是Objective-C的1.3倍
2、报错精准
报错的时候直接显示报错行
。
3、定义变量简单
定义变量不用区分整型,浮点型等等,变量使用var
,常量使用let
。
4、可视化互动效果
开发工具带来了Xcode Playgrounds
功能,该功能提供强大的互动效果,能让Swift源代码在撰写过程中实时显示出其运行结果。
5、函数式编程的支持(Map、FlatMap、Filter、Reduce等函数方法)
Swift 语言本身提供了对函数式
编程的支持;
Objc 本身是不支持
的,通过引入 ReactiveCocoa
这个库才可支持。
Map:
var results = [1,3,5,7]
let results = values.map({
(element) -> Int in
return element * 2
})
//"[2, 6, 10, 14]"
Filter:
var values = [1,3,5,7,9]
let flattenResults = values.filter{
$0 % 3 == 0
}
//[3, 9]
Reduce:
var values = [1,3,5]
let initialResult = 0
var reduceResult = values.reduce(initialResult, combine: {
(tempResult, element) -> Int in
return tempResult + element
})
print(reduceResult)
//9
三、Swift 缺点
1、推广度
还不全面,资源少
很多大公司,以及一些老的项目,仍然使用OC语言进行开发。当遇到一些问题的时候,解决问题的方案很少,网上的资源也很稀缺。
2、还不稳定
从swift2.0到swift3.0再到现在的swift4.0区别很大,每次升级都会有几十甚至上百个错误提示,难免急出一身冷汗。
3、第三方库
的支持不够多
现在swift版本的第三方库
是非常稀有的,有时需要导入OC版本的第三方来进行混合开发,而有的·兼容性·并不好,而且使项目变大,运行速度也会变慢。
4、App体积
变大
使用 Swift 后, App 体积大概增加 5-8 M
左右,对体积大小敏感的慎用。(体积变大的原因是因为 Swift 还在变化,所以 Apple 没有在 iOS 系统里放入 Swift 的运行库,反而是每个 App 里都要包含其对应的 Swift 运行库。)
5、上线方式
改变
不能使用application Loader
上传包文件,会提示你丢失了swift support files
,只能使用xcode
直接上传。
四、Swift 与 Objective-C 区别
========================= Swift独有 ====================
1、范围运算符
- a...b 表示 [a,b] 包括a和b 。 (如3...5 就是范围取3,4,5)
- a..<b 表示 [a,b) 包括a,不包括b 。 (如3...5 就是范围取3,4)
- 常见的如for循环:for i in 0...9{}
2、独有的元组类型(高级数据类型
)
-
元组(tuples)
把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。eg:
var value = (Int,String) = (x:15,y:"abc")
3、使用let定义常量,var定义变量
使用常量,更加安全,不能够被修改,在需要对对象进行修改的时候 只能用var修饰.
4、if let 、 guard let 的用法
缩减代码量,安全处理数据逻辑。
5、引入了可选项类型(Optionals)
,处理变量值不存在
的情况
可选项的意思有两种:一是变量是存在的,例如等于X,二是变量值根本不存在。
Optionals类似于Objective-C中指向nil的指针
,但是适用于所有数据类型
,而非仅仅局限于类
Optionals 相比Objective-C中nil指针
更加安全和简明
,也是Swift诸多最强大功能的核心
)
========================= 细节使用区别 ====================
1、swift不分.h和.m文件
,一个类只有.swift一个文件,所以整体的文件数量比起OC有一定减少
2、swift句尾不需要分号
,除非你想在一行中写三行代码就加分号隔开
3、swift数据类型都会自动判断
, 只区分变量var
和常量let
4、强制类型转换格式不同:OC强转:(int)a
而 Swift强转:Int(a)
5、关于BOOL类型更加严格 ,Swift不再是OC的非0就是真,而是true才是真
,false才是假
6、swift的循环语句
中必须加{}
,就算只有一行代码也必须要加
7、swift的switch语句
后面可以跟各种数据类型
了 ,如Int
、字符串
都行,并且里面不用写break
(OC的不能跟字符串)
8、swift if语句
后的括号可以省略: if a>b {}
,而OC里 if后面必须写括号
9、swift打印用 print("")
打印变量时可以 print("\(value)")
,不用像OC那样记很多%@
,d%
等
10、Swift3的【Any】
可以代表任何类型的值,无论是类
、枚举
、结构体
还是任何其他Swift类型,这个对应OC中的【id】
类型