遷移程序到swift3.0, 僅列舉這四種情況,你是什么感覺??

前言:

之前深夜看了wwdc16的直播, 很大的感受就是: Apple開放了很多的東西, 并且多次提到了China. 期待好久的swift3.0將要來臨, 筆者安裝了xcode8 beta版想看看swift3.0的模樣, 安裝好了, 打開之前的一個swift2.3的項目, 編譯立馬數(shù)不清的錯(雖然之前有心理準(zhǔn)備), 但是當(dāng)看到很多莫名的錯誤的時候, 最初的感覺是: 心都涼了. 這里列出四個讓大家初識一下變化之大...

1, 首先是: 很多方法只是改了方法的命名方式, 是編譯器可以修改的,點擊修改可完成更新到最新的語法. 比如

        let offset = panGesture.translationInView(panGesture.view)
        改為
        let offset = panGesture.translation(in: panGesture.view)
        
        系統(tǒng)的枚舉改為了小寫開頭
        eg: UIGestureRecognizerState.changed
    

2, 居然會顯示很多重寫的方法報不存在的錯誤(比如: tableView的代理方法...).,著實詫異. 仔細看看才發(fā)現(xiàn), Foundation里面的類名很多被重新修改了(去掉了NS)

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { }
  
  比如這里的NSIndexPath -> 變?yōu)榱薎ndexPath
  NSBundle.mainBundle()   -> 變?yōu)榱?Bundle.main()
  UIColor.redColor() -> UIColor.red()
    

3, 在測試了一下和OC文件的交互上, 發(fā)現(xiàn)一點小問題(可能是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()
// 我的天, 下面這行代碼報錯了, 不過還好編譯器有提示, 說是使用了未解包的對象
// 當(dāng)然, 我們知道在之前的swift2.X中這里的ocfile是可選值(!), 不過我們?nèi)匀豢梢灾苯舆@樣調(diào)用
        print(ocfile.name)
// 在目前的3.0版本中 這里的ocfile是可選值(?), 需要我們處理解包, 比如
        print(octile?.name)

編譯, 運行通過, 但是編譯器打印了很多信息出來, 這里暫時不管它是什么了
可是運行到oc文件里的NSLog代碼處并沒有打印信息, 真是欲哭無淚啊
然后我又在xocode7.3里面使用swift寫了相同的代碼, 運行正常, 有打印信息出來, 不知道這是bug還是什么, 沒有找到解決方法

4, 接著我想到在看直播介紹swift的新特性時候提到了OC中的常量string也有改變, 就立馬試了試通知NSNotification

首先之前發(fā)現(xiàn)Foundation里面的NS被去掉, 但這里習(xí)慣性的敲了NS開頭, 沒成想到, 居然能夠敲出NSNotification(又是一陣心碎...), 接著下一行代碼

        let noti = NSNotification(name: "testName", object: self)
      // 但是這行代碼是報錯的, 還好編譯器有提示(見下圖), 這里也不管為什么是提示的NSString了, 因為就算是報錯也應(yīng)該是提示String ,于是fix了
        let noti = NSNotification(name: "testName" as NSNotification.Name, object: self)
      // 這樣編譯器就沉默了, 不報錯



Snip20160615_22.png

接著寫了NSNotificationCenter來發(fā)布通知, 結(jié)果, 習(xí)慣性的NS開頭但是怎么也沒有NSNotificationCenter提示出來, 強制敲出來但是報錯, 于是使用NotificationCenter(不得不吐槽為何之前可以,這里不可以)

Snip20160615_23.png

接著代碼如下

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

看上去代碼應(yīng)該是沒有什么問題的, 不過不過, 這里確實感覺到現(xiàn)在的編譯速度快了好多, 立馬就報錯了

Snip20160615_24.png

修改之后, 然后注冊了通知監(jiān)聽者, 代碼是這樣的

        let noti = NSNotification(name: "testName" as NSNotification.Name, object: self)
        let notiCenter = NotificationCenter.default()
        // 先注冊通知監(jiān)聽者
        notiCenter.addObserver(self, selector: #selector(self.testNoti(noti:)), name: "testName" as NSNotification.Name, object: self)

        //延時2s
        sleep(2)
        // 發(fā)布通知
        notiCenter.post(noti as Notification)//之前直接使用Notification就沒有這樣as來轉(zhuǎn)換了
        
        
  // selector是這樣的
    func testNoti(noti: Notification) {
        print(noti)
    }

成功運行起來, 并且打印正確, 但是我看到寫的將string要轉(zhuǎn)換為
NSNotification.Name,我覺得這不應(yīng)該是通知的正確使用方式,
還需下來學(xué)習(xí).

我只是在短短的時間內(nèi), 就發(fā)現(xiàn)了很多的改變, 雖然看上去比較麻煩, 但是我相信在適應(yīng)后, 一定會是很贊賞這些改變的,這里只是列舉四點分享給大家, 讓大家感覺一下. 后面一段時間, 會一直學(xué)習(xí)swift3.0的了, 會陸續(xù)分享學(xué)習(xí)心得, 當(dāng)然期間還是會分享一些其他方面的博客(不過確實需要考慮,以后的短時間內(nèi)博客是用那個版本的swift來寫了, 或者用OC ? ), Demo代碼很少, 還是分享給大家

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,877評論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,641評論 4 61
  • 曾經(jīng)被告知:閱讀能暫時屏蔽掉呱噪浮夸的世俗 因身心合一的專注 而沉醉 安享知識 文化的熏陶 ... 哎......
    璐狗爾閱讀 206評論 1 0
  • 今天路過小區(qū)門口時,聽到兩個大約45歲左右的大姐(雖然可以叫阿姨,但還是禮貌一點好)在談?wù)摯虬绾蛺勖赖脑掝}...
    秋之木禾閱讀 276評論 0 0
  • 天高云淡,我們一路向西,走過一村一寨。路有多遠,心有多遠。我們是一群浪跡天涯的游子。 我不期望能遇見多美的風(fēng)景,讓...
    辣江山閱讀 355評論 2 3

友情鏈接更多精彩內(nèi)容