Swift3.0笔记整理

Swift3.0的出现,让我这个oc党不得不开始学习Swift了,而且也觉得是时候该学习Swift3.0了,因为已经稳定很多了,我想Swift3.0和Xcode8的问世,引来了骂声一片,可是同时也不得不赞一下Swift对iOS带来的改变,学了几天后,感觉Swift真的很有魅力,再次整理一下自己学习的笔记

1.在swift3.0中方法的返回值必须要有接收,否则会报警或者报错,即使提醒开发者需要接收方法的返回值,当我们不需要接收返回值时,我们有两种方法告诉编译器此方法可以不用接收方法的返回值

<pre>
override func viewDidLoad()
{ super.viewDidLoad()
方式一: 需要@discardableResult
let ca = function()
ca.sum(a: 10, b: 10) // 这里会有一个警告,提示开发者需要接收返回值
方式二: 不需要@discardableResult
let _ = ca.sum(a: 10, b:10)
}
struct function {
@discardableResult
func sum(a: Int, b: Int) -> Int
{
return a + b
}
}
</pre>

注意这里我们使用了struct, 我们来看看它和Class的区别
在Swift中struct与Class非常相似, 但是他们还是有点区别的
区别一: struct没有继承功能,但是class是可以继承的
区别二: 区别体现在内存上, struct是通过值传递的,而class是通过 引用来传递的.

2.自定义协议时,也有一些发生变化
  • 在Swift3.0之前,定义协议只需要在协议(protocol)前面添加@objc即可,但是在Swict3.0中定义协议除了在协议前面加@objc外,在协议中的方法的修饰符前也要加@objc
    <pre>
    @objc pritocol SinaHomeDelegate {
    @objc optional func func1()
    func func2()
    }
    </pre>
3.SDK类中的变化
  • 在以前的Swift中,很多方法或者函数都和OC很像,所以对很多OC开发者来说,上手很容易,但是在Swift3.0后,彻底改变了
    这种情况,原因是这样可以消除函数又长又臭的缺点, 比如说: 消除了类型前缀,方法名去重, 函数和方法去C风格
    <pre>
    // (1), 去掉类型前缀
    let url = URL(string:"www.baidu.com") // 以前的NSURL变成了URL
    let data = Data() // 以前的写法: let data = NSData(),显然现在的更加简洁
    // (2), 可读性更好了
    let isFileURL = url?.isFileURL // 以前的写法是url?.fileURL, 现在的写法可读性更好了
    // (3), 移除多余的动词,其他名词,介词修饰语,显然这样更加简单,简洁,易读
    var array = [1, 2, 3, 4]
    array.append(contentsOf: [4, 5, 6]) // 以前的写法: array.appendContentsOf([4, 5, 6])
    array.remove(at: 0) // 以前的写法: array.removeAtIndex(0)
    // (4), 在Swift3.0中尽量消除重复,可以减少语义歧义 例如:
    btn.backgroundColor = UIColor.red() // 以前的写法: btn.backgroundColor = UIColor.redColor()
    //(5),枚举的成员首字母变成了小写
    label.textAlignment = .center // 以前的写法: label.textAlignment = .Center
    // 如果按钮的状态是普通状态时,normal可以省略变为()
    let btn = UIButton()
    btn.setTitle("按钮", for: UIControlState()) // Nomal状态可以省略Normal
    btn.frame = CGRect(x: 100, y: 100, width: 50, height: 50) // 不在是CGRectMake....
    btn.backgroundColor = UIColor.red() // 不在是redColor()
    view.addSubview(btn)
    </pre>
4.去C风格,易读性更好

<pre>
(1)设置控件位置
btn.frame = CGRect(x: 10, y: 10, width: 100, height: 100)
(2)GCD也有变化
DispatchQueue.global().async {
//do something
//异步返回主线程,同步容易造成线程卡死
DispatchQueue.main.async {
//do something
}
}
GCD延迟方法
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
print("----延迟函数-----");
}
(3)Swift3.0通知的变化
NotificationCenter.default.addObserver(self, selector: #selector(HomeViewController.loadDatas), name:Notification.Name("loadData"), object: nil)
(4)新的浮点型协议, Float, Double, CGFloat使用了新的协议,主要是提供了IEEE-754标准的属性和方法
let a = 2 * Float.pi // 以前的写法: let a = 2 * M_PI // 上面的写法可能还没有以前的写法好读好看,所以下面这种写法是推荐写法,简洁易读
let a = 2.0 * .pi // 这样的写法主要是取决于前面的是否是浮点类型, 如果是后面的Float可以省
(5)获取沙盒路径的方法
NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last
</pre>

5.Swfit的关键字的变化

private和fileprivate

  • private: 私有属性和方法,仅在当前类中可以访问,不包括分类;
  • fileprivate: 文件内私有属性和方法,仅在当前文件中可以访问,包括同一个文件中不同的类。
  • public和open
    在Swift2.3中,pubic有两层含义:
    • 这个元素可以在其他作用域被访问
    • 这个元素可以在其他作用域被继承或者override

继承是一件危险的事情。尤其对于一个framework或者module的设计者而言。在自身的module内,类或者属性对于作者而言是清晰的,能否被继承或者override都是可控的。但是对于使用它的人,作者有时会希望传达出这个类或者属性不应该被继承或者修改。这个对应的就是 final。

final的问题在于在标记之后,在任何地方都不能override。而对于lib的设计者而言,希望得到的是在module内可以被override,在被import到其他地方后其他用户使用的时候不能被override。

这就是 open产生的初衷。通过open和public标记区别一个元素在其他module中是只能被访问还是可以被override。
在Swift3.0中
public表示当前类、属性或者方法只能在当前module内被继承或者override,在当前module意外只能被访问;
open表示当前类、属性或者方法可以在任何地方被继承或者override;
final是一个辅助修饰词,表示当前类、属性或者方法在任何地方都只能被访问,不能被继承或者override;
internal表示默认级别。
总结
Swfit3.0中,访问控制权限由高到低依次为:open、public、internal(默认)、fileprivate,private。

6.Swift3.0中枚举的变化

在Swift2.3中,官方使用的枚举值首字母使用大写,在Swift3.0中,统一将官方使用的枚举值首字母改为了小写。虽然自定义的枚举中枚举值首字母依然可以使用大写,但是为了和官方风格保持一致,建议枚举值首字母使用小写。
<pre>
/// 这种写法是正确的(与官方风格一致,推荐使用)
enum Direction: String
{
case east = "east"
case south = "south"
case west = "west"
case north = "north"
}
/// 这种写法也是正确的(与官方风格不一致,不推荐使用)
enum Sex: Int {
case Man = 0
case Woman = 1
case Other = 2
}
</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 写在前面 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->C...
    飘金阅读 319评论 0 1
  • 写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Co...
    光无影阅读 21,541评论 24 111
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,776评论 1 10
  • Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...
    酷走天涯阅读 7,145评论 6 10
  • 寻找 许自立来到狐仙大本营,情形和上次来大不一样了。上次他是身上带伤,被解救而来的,所以进入大本营根本没时间,也没...
    高丘上阅读 334评论 10 18