V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Pandara
V2EX  ›  程序员

swift 相比起 objective-c 到底有什么优势呢

  •  
  •   Pandara ·
    PandaraWen · 2016-06-27 10:29:33 +08:00 · 15886 次点击
    这是一个创建于 3074 天前的主题,其中的信息可能已经有所发展或是发生改变。
    77 条回复    2016-06-29 13:33:32 +08:00
    crisfun
        1
    crisfun  
       2016-06-27 11:09:55 +08:00
    首先,是新东西,必然有一波吹

    其他的还是请 PL 专业人士,实际用户来说说的好
    yagao0o
        2
    yagao0o  
       2016-06-27 11:21:11 +08:00
    最重要的是: Swift 现在是亲儿子阶段……
    使用的便利性要高于 Objective-C ,毕竟设计时就是为了取代它。
    chaoxn
        3
    chaoxn  
       2016-06-27 11:23:00 +08:00
    其次,语法简洁,必然有一波吹

    其他的还是请 PL 专业人士,实际用户来说说的好
    DearMark
        4
    DearMark  
       2016-06-27 11:23:46 +08:00
    Objective-C :我还可以再战 10 年。
    ethanlu
        5
    ethanlu  
       2016-06-27 11:24:07 +08:00
    作为一个 0 基础入门的, swift 比起 OC 相对容易懂,主要是读起来很像英文句子。
    karonl
        6
    karonl  
       2016-06-27 11:24:19 +08:00 via iPhone
    开源啊,未来就很有变数
    SuperMild
        7
    SuperMild  
       2016-06-27 11:27:18 +08:00
    现在新出各种的语言主要注重两个方面的改进,写小程序时有甜度适中的语法糖,写大程序时有合理的特性减少出错可能性(比如 Optional Type )。
    ichanne
        8
    ichanne  
       2016-06-27 11:37:47 +08:00 via iPhone
    有些新特性 OC 里面没有,比如面向协议编程,当然, Swift 还有个致命的缺点,不能方便的支持热修复。
    c447279704
        9
    c447279704  
       2016-06-27 13:12:50 +08:00
    Swift 致力于成为一门通用的语言,这点和 OC 有根本的区别
    1OptionalType 更安全
    2 不像 OC 那样啰嗦,很简洁,少打很多没用的字
    3 强大的枚举和 Where
    4 泛型
    5 开源,随时加入新的 idea
    garipan
        10
    garipan  
       2016-06-27 13:37:22 +08:00
    亲儿子这点太重要了
    看一下近几年 OC 和 Swift 的排名变化就知道了
    只要苹果一天还占据市场主导地位, swift 就一天有优势
    而且还开源了,苹果是铁了心要把 Swift 做大了
    虽然现在 Swift 还有很多缺点,但是按照目前的发展速度,不用几年必然全方面超越 OC
    expkzb
        11
    expkzb  
       2016-06-27 13:46:58 +08:00   ❤️ 1
    swift 能令 objective-c 程序员更值钱
    beimenjun
        12
    beimenjun  
       2016-06-27 13:52:11 +08:00
    大势所趋, Swift 能不能起来不知道, O-C 按照剧本应该要凋零的。
    walkingway
        13
    walkingway  
       2016-06-27 14:11:33 +08:00   ❤️ 1
    那些说 Swift 比 OC 简单的只是入了个门吧
    nicevar
        14
    nicevar  
       2016-06-27 14:52:30 +08:00
    趋势是 swift ,代码能简洁点,容易上手,其他的优势真想不到了
    会 swift 能做 iOS 开发,不过实际的工作中不会 oc 可能很多问题解决不了
    youxiachai
        15
    youxiachai  
       2016-06-27 14:57:01 +08:00
    反正.你搞 ios..两个都要学...orz
    WinterWu
        16
    WinterWu  
       2016-06-27 14:57:11 +08:00 via iPhone
    @ichanne 我觉得热修复才是 oc 的漏洞。从安全角度而言,绕过了大量“防火墙”。
    xhowhy
        17
    xhowhy  
       2016-06-27 16:03:23 +08:00
    swift 不仅具备 oc 的面向对象、动态等传统特性,还具备函数式编程、泛型等比较新的特性
    shawnclovie
        18
    shawnclovie  
       2016-06-27 16:17:58 +08:00
    等 swift 能和 c++互操作了, OC 也就只剩可以随便用 method swizzing 这点“优势”了。
    blue7wings
        19
    blue7wings  
       2016-06-27 16:47:10 +08:00
    我尤其喜欢 swift 的语法,我认为是最为优雅的。
    jackisnotspirate
        20
    jackisnotspirate  
       2016-06-27 16:53:38 +08:00
    用了 swift 就回不去 oc 了。
    dantegg
        21
    dantegg  
       2016-06-27 16:57:45 +08:00
    简单[笑 cry]
    chisj
        22
    chisj  
       2016-06-27 17:06:10 +08:00
    @jackisnotspirate 然而我用了快 1 年,又要回去了,蛋疼。
    MountainRain
        23
    MountainRain  
       2016-06-27 17:09:07 +08:00
    其实没有几家公司招 swift 的
    warcraft1236
        24
    warcraft1236  
       2016-06-27 17:11:26 +08:00
    OC 为啥不是亲儿子呢?不是乔布斯从他创办的公司带来的吗
    qw0258
        25
    qw0258  
       2016-06-27 17:28:02 +08:00
    swift 是一种包含了更多现代化编程语言特性的语言
    OC 是老古董
    araraloren
        26
    araraloren  
       2016-06-27 17:34:45 +08:00
    @yagao0o ~~从来没权威人士说或者官方人士说 swift 就是为了取代 oc
    LMkillme
        27
    LMkillme  
       2016-06-27 17:43:34 +08:00
    swift 相比 OC 先进,与此同时,也难多了,说 swift 简单的是不是只看了新闻?
    Soar360
        28
    Soar360  
       2016-06-27 17:56:18 +08:00
    Swift 优雅?你是没看过 C#吧?
    droiz
        29
    droiz  
       2016-06-27 18:05:49 +08:00
    语法清晰简洁,具有更多现代化语言特性,你学了就知道了
    murmur
        30
    murmur  
       2016-06-27 18:09:02 +08:00
    说 swift 比 obj-c 好大概和 javascript 比 java 优雅是一个想法
    wweir
        31
    wweir  
       2016-06-27 19:14:46 +08:00 via Android
    函数式在正确性、多核利用等方面相对其它范式要高出不少
    yjxjn
        32
    yjxjn  
       2016-06-27 20:53:20 +08:00
    @expkzb 不能这么说吧,你看比如曾经的 Cobol , pascal 啥的,收入不一定比干移动互联网的挣钱啊。
    MartinLv
        33
    MartinLv  
       2016-06-27 21:22:16 +08:00
    语法简洁是最不重要的…… swift 真正有吸引力的是新的编程范式的支持,函数式、泛型、面向协议、还有一定的模式匹配能力。语言的表达能力甩 OC 几条街。另外静态方法调用性能比 OC 好。但是 OC 的 runtime 用不了了,热修复、 AOP 不如以前好搞。
    sensui7
        34
    sensui7  
       2016-06-27 21:26:00 +08:00
    有未来
    wizardforcel
        35
    wizardforcel  
       2016-06-27 21:29:50 +08:00
    把 oc 那些看着不顺眼的语法都改进了一番。

    你可以说语言只是一层皮,但是它毕竟是我们平常用的东西,美观与否会影响我们的生产力。
    Taojun0714
        36
    Taojun0714  
       2016-06-27 21:57:10 +08:00
    struct RecursiveFunc<F> {
    let o : RecursiveFunc<F> -> F
    }

    func Y<A, B>(f: (A -> B) -> A -> B) -> A -> B {
    let r = RecursiveFunc<A -> B> { w in f { w.o(w)($0) } }
    return r.o(r)
    }

    let factorial = Y { (f: Int -> Int) -> Int -> Int in
    { $0 <= 1 ? 1 : $0 * f($0-1) }
    }
    println(factorial(10))
    free9fw
        37
    free9fw  
       2016-06-27 22:30:24 +08:00
    pop , enum 、 struct 、各种简短的语法,不用写分号。快不快不知道,但对于我来说,写的东西变很少很少了,变很爽
    everettjf
        38
    everettjf  
       2016-06-27 23:09:47 +08:00
    虽然没学 swift 。但感觉更多现代化编程语言特性意味着更复杂(或者叫难学)。
    目前感觉 OC 能满足需求, swift 学习计划就一直搁置。
    DSKcpp
        39
    DSKcpp  
       2016-06-27 23:19:03 +08:00
    学习难度比 OC 大
    ChengLuffy
        40
    ChengLuffy  
       2016-06-28 00:12:12 +08:00
    范型很爽,但从编程这个过程来说,我感觉 swift 比 OC 有快感。。。个人感受
    mudkip
        41
    mudkip  
       2016-06-28 00:14:18 +08:00
    写代码的幸福感倍增。
    这个理由还不够么?
    hstdt
        42
    hstdt  
       2016-06-28 00:48:42 +08:00 via iPhone
    写起来开心,效率高,舒服。
    IvanLing
        43
    IvanLing  
       2016-06-28 01:00:44 +08:00 via iPhone
    请在项目中使用 swift 的举个抓🙋🏻
    nino789pzw
        44
    nino789pzw  
       2016-06-28 01:00:50 +08:00
    wohenyingyu01
        45
    wohenyingyu01  
       2016-06-28 01:11:28 +08:00 via iPhone
    调用不了 c 库。我们的 ios 代码 80%都是 C ……
    rqzheng2008
        46
    rqzheng2008  
       2016-06-28 02:47:11 +08:00
    swift 3.0 API 又大改了,苹果设计语言怎么就不考虑一下向后兼容呢
    Perry
        47
    Perry  
       2016-06-28 03:13:49 +08:00
    易上手,新手写起来舒服
    一直在更新
    chai2010
        48
    chai2010  
       2016-06-28 06:42:24 +08:00 via iPhone
    objc 一直是补丁语言( c++也是一样的问题),它们虽然抱住了 c 的大腿,但是也包含了 c 的诸多问题,语言不能自由健康的发展进化。 objc 是该进垃圾桶了。

    swift3 语法没多大变化, API 部分也只是转换规则做了调整。最期待的还是 spm 能早日支持 iOS
    RqPS6rhmP3Nyn3Tm
        49
    RqPS6rhmP3Nyn3Tm  
       2016-06-28 07:07:44 +08:00 via Android
    Swift :从精通到入门
    XueSeason
        50
    XueSeason  
       2016-06-28 08:43:27 +08:00
    @MartinLv 好像看到小影的同事了。
    tianshilei1992
        51
    tianshilei1992  
       2016-06-28 08:45:13 +08:00
    插个题外话…
    iBooks 国区不可用以后,最新的 Swift 那本教程去哪找呀…
    xsown
        52
    xsown  
       2016-06-28 08:56:54 +08:00
    用过 swift ,会用 swift 的,一定不会再愿意用 oc 了
    觉得 swift 是吹的,都不是 iOS 程序员,或者是根本没好好用过 swift 的人
    chai2010
        53
    chai2010  
       2016-06-28 09:17:50 +08:00
    说 Swift 不兼容升级导致“从精通到入门”,估计有这几类: 1. 调侃; 2. 精通程度到 println 函数; 3. 非 iOS 开发者
    Ixizi
        54
    Ixizi  
       2016-06-28 09:21:23 +08:00
    fatestigma
        55
    fatestigma  
       2016-06-28 09:23:00 +08:00
    Swift 语法比 Obj-C 简单非常多,对于新手入门简单,这应该也是苹果希望的。另外作为苹果的亲儿子和 IBM 的干儿子,感觉发展还是很有劲头的吧。
    另一方面,好像 Obj-C 在 06 年开始进入 2.0 之后也没有什么大的更新了,而 C 、 C++ 还在发展之中,而 Swift 现在更新还是非常频繁的,可以进一步支持各种现代化语言的特性。
    PublicFourWord
        56
    PublicFourWord  
       2016-06-28 10:08:29 +08:00
    no C in Swift
    chuhemiao
        58
    chuhemiao  
       2016-06-28 10:25:52 +08:00
    MartinLv
        59
    MartinLv  
       2016-06-28 10:32:11 +08:00
    @XueSeason 好巧。握个爪~
    noif
        60
    noif  
       2016-06-28 11:23:48 +08:00
    @ethanlu 写了 5 年的老鸟说 oc 完全就是在写英文段子
    quxw
        61
    quxw  
       2016-06-28 13:54:46 +08:00
    没用过 obj-c 但对其冗长的命名规则让我望而却步
    holy_sin
        62
    holy_sin  
       2016-06-28 13:58:13 +08:00   ❤️ 1
    枚举
    Taojun0714
        63
    Taojun0714  
       2016-06-28 15:29:29 +08:00
    @chuhemiao swift 写的 Y combinator ……
    chuhemiao
        64
    chuhemiao  
       2016-06-28 15:36:55 +08:00
    @Taojun0714 嗯,还以为是 rust ,看着都差不多。。。
    jason19659
        65
    jason19659  
       2016-06-28 16:36:17 +08:00
    easy to use
    xAx
        66
    xAx  
       2016-06-28 16:56:57 +08:00
    降低公司员工工资支出,进而提高公司利润
    xAx
        67
    xAx  
       2016-06-28 17:02:42 +08:00
    从语言本身分析一门商业公司推出的语言的好坏没任何意义,无利不起早
    crashX
        68
    crashX  
       2016-06-28 17:22:39 +08:00
    说 swift 比 OC 简单的就跟说 scala 比 java 简单一样,估计没做过项目吧。还有 OC 的 runtime 和 KVO ,这俩纯 swift 目前没有,是硬伤。 swift 的新特性可以使代码更严谨,并不能做太多的事情。当下而言纯 swift 的代码不如纯 OC 能做的事情多。
    SunnyCoffee
        69
    SunnyCoffee  
       2016-06-28 18:02:36 +08:00
    oc 的历史遗留问题太多了吧。
    nil,NSNull,NULL,true,YES ,作为个新手,真是把人绕晕了。 case 不支持 String ,没有 java 的 @Override ,@Deprecated 。
    很多东西,单纯的靠升级很难解决,还不如直接换了。
    poetowen
        70
    poetowen  
       2016-06-28 20:52:36 +08:00
    Safe Fast Modern
    n6DD1A640
        71
    n6DD1A640  
       2016-06-28 23:42:03 +08:00
    closure
    webjin1
        72
    webjin1  
       2016-06-29 01:32:42 +08:00 via Android
    看名字越短越好,何况它还带-
    ehs2013
        73
    ehs2013  
       2016-06-29 07:18:35 +08:00
    @webjin1 objc vs swift
    webjin1
        74
    webjin1  
       2016-06-29 09:34:37 +08:00 via Android
    @ehs2013 简写也算?
    zhangweifang
        75
    zhangweifang  
       2016-06-29 09:39:13 +08:00
    swift 语言,学习的时候感觉好多语言特性设计的真是正确的,但是一到用的时候就不知道怎么下手,相对 ObjC 更直观, swift 更抽象的感觉。
    Override
        76
    Override  
       2016-06-29 10:14:07 +08:00
    我仿佛又听到有人在背后 @我
    @SunnyCoffee
    d553296416
        77
    d553296416  
       2016-06-29 13:33:32 +08:00
    swift 动态部署能力很差。。。不像 oc 有 reactnative wax weex luaview jspatch 等
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5312 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.