从此刻开始拥抱 Swift 3.0
来源:互联网 发布:啊哈算法属于什么 编辑:程序博客网 时间:2024/06/04 08:29
API is shortened
++ / –
Swift 2.2 的时候对 a ++ 或者 a – 已经给出warning 提示将在Swift3.0中将废除。
不嫌麻烦可以重载运算符来实现
postfix operator ++postfix func ++(a: Int) -> Int { return a + 1}a++ // 11
更彻底点可以考虑使用引用,加上 inout
函数中的 var
为了修改函数参数,添加 var 关键字
func setName(var name: String) {}
现已删除
func setName(name: String, na: String) { name += na}
无法再修改参数, inout可以
Repeat
var i = 0repeat { print("Hello") i = i + 1} while( i < 10 )
替代 do while 感觉主要是避免与 do catch冲突
每个函数的参数标签一致:
func getPerson(name: String, age: Int) { //....}
Swift 2.2 中:
getPerson("Vic", age: 10)
Swift 3 中:
getPerson(name: "Vic", age: 10)
除非手动添加 _ 否则参数名会保持一致性原则
一直在改变的Selector
Swift 3:
button.addTarget(Responder(), action: #selector(Responder.tap), for: .touchUpInside)
将确定selector的过程从运行时移到了编译时。
KVO
#KeyPath()//形式类似于Selector
只适用于非Objc对象。
class Object : NSObject { @objc var name = "" var age = 0 init(name: String, age: Int) { self.name = name self.age = age }}let sss = p.value(forKey: #keyPath(Object.age))
@discardableResult
如果未使用函数返回值,在没有 @discardableResult的前提下,会报错
fileprivate: 让私有变得更具体
之前 Swift 2.2 及之前版本,private 并不是严格的私有,在同一文件,依然可以访问到.
为了严格化, Swift3.0 中 设置了 fileprivate 来取代之前 private 的作用。 而新的 private 则是严格的私有权限。
fileprivate func sss() {}private func aaa() {}
private 变得更加严格。
class Access { private var a = 0 private func getA() -> Int { return a; } fileprivate func desc() { print("\(a) time") }}let p = Access()// 报错,提示getA() 是私有成员p.getA()
上述p只能访问desc()
Swift现有 访问级别
公开(public)
内部(internal)
文件外私有(fileprivate)
私有(private)
inout 变了
之前的写法
func saaa(inout a: Int) {}
现在作为一种修饰符而存在
func saaa(a: inout Int) {}
**关联类型声明由 typealias 变为 associatedtype
先说下 Swift的关联类型**
Swift支持泛型,class struct enum 都支持泛型, 而协议呢?
Swift是一门面向协议的语言。
protocol hahah<T> {}
Protocols do not allow generic parameters, use associated types instead
泛型协议
protocol Haha { associatedtype Element var s: Int { get set } func getElement() -> Element}
在 Swift 3 中, 不再允许 typealias 来构造泛型。
告别C经典循环方式
for (int i = 0; i < 10; i ++)
Swift Loop Style
// i is not mutablefor i in 1...3 { // i += 1 print(i)}// i is mutablefor var i in 1...10 { i += 1 print(i)}// 枚举(1...3).forEach{i in print(i)}
告别柯里化函数
Xcode 7.3 的 Swift 2.2 版本中已有提示柯里化函数不再使用。
func add(a: Int)(b: Int) -> Int { return a + b}
当然函数式编程依然完美解决
func add(_ a: Int) -> (Int)-> Int { return { b in return a + b }}var s = add(10)(20)
- 从此刻开始拥抱 Swift 3.0
- 从此刻开始良好习惯
- 从此刻开始
- 改变从此刻开始
- 改变,从此刻开始
- 我们应该从此刻开始!
- 使命召唤,从此刻开始
- 也许图像学习从此刻开始
- 拥抱 IoT 从这里开始
- 此刻开始
- 比较字符串,要熟悉使用各种api从此刻开始
- 从此刻开始,遇见一个更好的自己
- 此刻,Blog开始!
- 从今天开始学习Swift -- Swift 初见
- Swift Review总结:从 Swift Style 开始
- 2016年12月15日开通的博客,技术生涯就从此刻开始!
- 拥抱Swift吧,骚年!
- 开始拥抱VS2005吧!
- visual studio 2013设置背景图片
- golang 操作c 标准库中的CString函数注意事项
- 十、driver_register
- 假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队的算法
- android studio 错误: 找不到符号 符号: 方法 xxx() 位置: 类 xxx
- 从此刻开始拥抱 Swift 3.0
- boost xml
- 写一个简单猜数字游戏的小程序
- 上网链接的判断
- mysql多维数据仓库指南--第二篇第5章_2
- 对线性回归,logistic回归和一般回归的认识
- tensorflow add操作的一个现象
- databinding中的TextView设置layout_marginTop
- 强大的Viewpager轮播实现