迁移程序到swift3.0, 仅列举这四种情况,你是什么感觉??

前言:

之前深夜看了wwdc16的直播, 很大的感受就是: Apple开放了很多的东西, 并且多次提到了China. 期待好久的swift3.0将要来临, 笔者安装了xcode8 beta版想看看swift3.0的模样, 安装好了, 打开之前的一个swift2.3的项目, 编译立马数不清的错(虽然之前有心理准备), 但是当看到很多莫名的错误的时候, 最初的感觉是: 心都凉了. 这里列出四个让大家初识一下变化之大...

1, 首先是: 很多方法只是改了方法的命名方式, 是编译器可以修改的,点击修改可完成更新到最新的语法. 比如

        let offset = panGesture.translationInView(panGesture.view)
        改为
        let offset = panGesture.translation(in: panGesture.view)
        
        系统的枚举改为了小写开头
        eg: UIGestureRecognizerState.changed
    

2, 居然会显示很多重写的方法报不存在的错误(比如: tableView的代理方法...).,着实诧异. 仔细看看才发现, Foundation里面的类名很多被重新修改了(去掉了NS)

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { }
  
  比如这里的NSIndexPath -> 变为了IndexPath
  NSBundle.mainBundle()   -> 变为了 Bundle.main()
  UIColor.redColor() -> UIColor.red()
    

3, 在测试了一下和OC文件的交互上, 发现一点小问题(可能是bug)

  • 首先我在swift项目中新建了一个oc文件, 和之前一样会提示是否建立桥接文件,
    选择建立后, 在桥接文件中引入新建的oc文件的头文件, 编译通过.
  • 在oc文件中我写了一个初始化方法, 然后在swift中使用他来初始化

OCFile

@implementation OCFile
- (instancetype)initWithName:(NSString *)name {
    if (self = [super init]) {
        self.name = name;
        NSLog(@"hello--------%@", self.name);
    }
    return self;
}
@end

swift文件

        let ocfile = OCFile(name: "test")
        view.backgroundColor = UIColor.red()
// 我的天, 下面这行代码报错了, 不过还好编译器有提示, 说是使用了未解包的对象
// 当然, 我们知道在之前的swift2.X中这里的ocfile是可选值(!), 不过我们仍然可以直接这样调用
        print(ocfile.name)
// 在目前的3.0版本中 这里的ocfile是可选值(?), 需要我们处理解包, 比如
        print(octile?.name)

编译, 运行通过, 但是编译器打印了很多信息出来, 这里暂时不管它是什么了
可是运行到oc文件里的NSLog代码处并没有打印信息, 真是欲哭无泪啊
然后我又在xocode7.3里面使用swift写了相同的代码, 运行正常, 有打印信息出来, 不知道这是bug还是什么, 没有找到解决方法

4, 接着我想到在看直播介绍swift的新特性时候提到了OC中的常量string也有改变, 就立马试了试通知NSNotification

首先之前发现Foundation里面的NS被去掉, 但这里习惯性的敲了NS开头, 没成想到, 居然能够敲出NSNotification(又是一阵心碎...), 接着下一行代码

        let noti = NSNotification(name: "testName", object: self)
      // 但是这行代码是报错的, 还好编译器有提示(见下图), 这里也不管为什么是提示的NSString了, 因为就算是报错也应该是提示String ,于是fix了
        let noti = NSNotification(name: "testName" as NSNotification.Name, object: self)
      // 这样编译器就沉默了, 不报错



Snip20160615_22.png

接着写了NSNotificationCenter来发布通知, 结果, 习惯性的NS开头但是怎么也没有NSNotificationCenter提示出来, 强制敲出来但是报错, 于是使用NotificationCenter(不得不吐槽为何之前可以,这里不可以)

Snip20160615_23.png

接着代码如下

        let noti = NSNotification(name: "testName" as NSNotification.Name, object: self)
        let notiCenter = NotificationCenter.default()
        notiCenter.post(noti)

看上去代码应该是没有什么问题的, 不过不过, 这里确实感觉到现在的编译速度快了好多, 立马就报错了

Snip20160615_24.png

修改之后, 然后注册了通知监听者, 代码是这样的

        let noti = NSNotification(name: "testName" as NSNotification.Name, object: self)
        let notiCenter = NotificationCenter.default()
        // 先注册通知监听者
        notiCenter.addObserver(self, selector: #selector(self.testNoti(noti:)), name: "testName" as NSNotification.Name, object: self)

        //延时2s
        sleep(2)
        // 发布通知
        notiCenter.post(noti as Notification)//之前直接使用Notification就没有这样as来转换了
        
        
  // selector是这样的
    func testNoti(noti: Notification) {
        print(noti)
    }

成功运行起来, 并且打印正确, 但是我看到写的将string要转换为
NSNotification.Name,我觉得这不应该是通知的正确使用方式,
还需下来学习.

我只是在短短的时间内, 就发现了很多的改变, 虽然看上去比较麻烦, 但是我相信在适应后, 一定会是很赞赏这些改变的,这里只是列举四点分享给大家, 让大家感觉一下. 后面一段时间, 会一直学习swift3.0的了, 会陆续分享学习心得, 当然期间还是会分享一些其他方面的博客(不过确实需要考虑,以后的短时间内博客是用那个版本的swift来写了, 或者用OC ? ), Demo代码很少, 还是分享给大家

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

推荐阅读更多精彩内容

  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,385评论 0 12
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 曾经被告知:阅读能暂时屏蔽掉呱噪浮夸的世俗 因身心合一的专注 而沉醉 安享知识 文化的熏陶 ... 哎......
    璐狗尔阅读 140评论 1 0
  • 今天路过小区门口时,听到两个大约45岁左右的大姐(虽然可以叫阿姨,但还是礼貌一点好)在谈论打扮和爱美的话题...
    秋之木禾阅读 216评论 0 0
  • 天高云淡,我们一路向西,走过一村一寨。路有多远,心有多远。我们是一群浪迹天涯的游子。 我不期望能遇见多美的风景,让...
    辣江山阅读 286评论 2 3