运算符
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

通知的变化
// 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
}
}
网友评论