美文网首页
swift3 对比 swift2 更改了什么

swift3 对比 swift2 更改了什么

作者: 七里田间的守望者 | 来源:发表于2017-05-18 12:25 被阅读103次

运算符

i++ 更改为 i += 1
i--  更改为 i -= 1

for循环

//swift2.0 取消了 C语言风格的for循环
for var i = 0 ; i < 10 ; i++{
    
}

//现在的for循环
for i in 0 ..<10 {
    print(i)
}

// 如果想反向遍历
for i in (1...10).reversed(){
    print(i)
}

// 区间运算符的循环
//隔两个遍历 用下面的函数  当然它也可以遍历小数
for i in stride(from: 0, to: 10, by: 2){
    print(i)
}
// 如果想小于等于10 可以这么写
for i in stride(from: 0, through: 10, by: 2){
    print(i)
}

元祖

let score1 = (chinese:90,math:95)
let score2 = (chinese:90,math:100)
let score3 = (chinese:90,math:100)

//swift中运算符的本质 是函数
func <(t1:(Int,Int), t2:(Int,Int)) -> Bool {
    if t1.1 != t2.1 {
        return t1.1 < t2.1
    }
    return t1.0 < t2.0
}

score1 < score2
score3 < score2

func printScore(chinese : Int, math : Int){
    print("chinese:\(chinese),math:\(math)")
}
//printScore(score1) swift 2 写法
printScore(chinese: score1.chinese, math: score1.math)//现在的写法

selector

let btn = UIButton(type: UIButtonType.custom)
//swift 2.0 写法
btn.addTarget(self, action: "btnClick", for: UIControlEvents.touchDragInside)
//swift 3.0 写法
btn.addTarget(self, action: #selector(btnClick), for: UIControlEvents.touchDragInside)
func btnClick(){
    print("点击了按钮")
}

UIColor

将常用的标准颜色写成了只读属性,不再是方法,调用方法改变。
UIColor.red

Any和AnyObject

这两个类型都是Swift中很早就出现的类型,但是我们经常使用AnyObject,很少使用Any。
AnyObject类似于OC中的id类型,表示任意的class的实例对象,但是在Swift中,例如我们常见的String和Array都变为结构体了,而且在Swift3.0中,更多的类型或者枚举被写为结构体了,AnyObject的适用范围变相被削弱了,所以在Swift3.0的API中曾经许多AnyOjbect的类型被替换为Any了。
当然,这对于我们使用这些API没有影响,但是在我们自己定义方法时,如果需要用到AnyObject,就需要认真考虑一下该用AnyObject还是Any了。

Foundation框架部分类名去掉NS前缀

包括:UserDefaults、URL、NotificationCenter、Bundle、Timer、Thread、RunLoop
1244207-683a13e03f003fdb.jpeg

通知的变化

// Swift3.0中的通知
let _ = NSNotification(name: NSNotification.Name(rawValue: "name"), object: nil)
let _ = Notification(name: NSNotification.Name(rawValue: "name"))

获取沙盒指定文件夹路径的方法变化

获取文件路径统一交给FileManager来管理
let filePath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentationDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first

Swift3.0中GCD语法的改变

// 延迟执行代码
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
    print("hello")
}

private和fileprivate

  • private: 私有属性和方法,仅在当前类中可以访问,不包括分类;

  • fileprivate: 文件内私有属性和方法,仅在当前文件中可以访问,包括同一个文件中不同的类。

  • internal(默认访问级别,internal修饰符可写可不写)
    internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
    如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。
    如果是App代码,也是在整个App代码,也是在整个App内部可以访问。

  • public
    可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。

  • open
    可以被任何人使用,包括override和继承。

从高到低排序如下:
open > public > interal > fileprivate > private

class User {
    private var name = "private"
}

extension User{
    var accessPrivate: String {
        return name
    }
}

相关文章

网友评论

      本文标题:swift3 对比 swift2 更改了什么

      本文链接:https://www.haomeiwen.com/subject/xkrsxxtx.html