swift3新特性学习笔记

1, 权限控制

public , private, fileprivate, internal,open
公开,内部,文件外私有,私有
open: 只有被open标记的内容,在能在别的框架中 被 继承 和 重写
public: 可以被扩展。不能被重写或者不能被继承
多说无用

2,移除++,--

3,移除c风格的for循环语句

for i in 1 ..< 10 {}

4,移除函数形參列表中的 let, var 的显式调用

5,参数可变,使用inout, 而且inout位置,放在参数类型的前面, 做为类型的一部分

做为类型整体部分的有: inout, @escape, @noescape, @autoclusure

6,形參中的闭包 默认 是逃逸的改为 非逃逸的

7,柯里化函数形式变化了,只接受一个参数列表。 第二个参数列表, 可以作为返回的函数的形參列表。

当一个函数,返回类型是函数类型时, 就成为柯里化函数

8,类型方法 调用起来简洁化了

xcode8下面的, swift2.3 swift3 UIKit,Foundation等等这些iOS 10的framework,其实是分为两个不同目录下的。
很明显可以发现:swift2.3下面的UIApplicaiton 和 swift3下面的UIApplication文件内容不一样。
很多objc的常量变为swift类型了
objc的foundation framework 许多被转为swift的framework了, 比如UIColor,CGPoint等

9,枚举的类型名、枚举成员名,并没有要求首字母必须是大些还是小写

10,枚举变量的switch匹配中,支持多个关联类型的模式列表

enum helloType {
    case AAs(as:String,c:Int)
    case b
    case AGG(String,Int,String)
    case AGGG(Int,String,String)
}
let v:helloType = helloType.AGG("1", 1, "123")
switch v {
case .AGG("12",let x, let y), .AGG("", let x, let y), .AGG("123123", let x, let y):
    print(x,y)
default:
    print("")
}

11,允许很多系统的关键字作为函数形參列表中的参数标签

swift2.3也允许这样做的啊
func aGood(in Innn:String, for whichOne:String) {
}
aGood(in: "asdf", for: "123123")

12, 建议访问成员不要总是加self,合适的时候加, 并没有强性要求必须加,还是不能加

13, 协议里定义一个关联类型。 typealias改为associatedtype

//swift2.3报警告,但是也能用;swift3报错
protocol Container {
    typealias  Itemtype
    var count:Int {get}
    func getItem()->Itemtype
}
class Goodsder:Container {
    typealias   Itemtype = String
    var count: Int = 12
    func getItem() -> Itemtype {
        return "asdfasdf"
    }
}
//swift2.3也能用。swift3能用
protocol Container {
    associatedtype Itemtype
    var count:Int {get}
    func getItem()->Itemtype
}
```

####14,形參列表所有参数都会自动生成 标签:包括第一个参数也会标签。如果不要标签,必须手动加上下杠线_

你可能感兴趣的:(swift3新特性学习笔记)