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

打算用 Swift 开始搞 App,有啥坑吗?

  •  
  •   jseanj · 2014-10-14 16:48:32 +08:00 · 5040 次点击
    这是一个创建于 3472 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前用Swift写了些扩展方法,感觉坑还是很多的。
    不知道大家是否已经用Swift开始写了?有啥注意事项吗?
    25 条回复    2014-10-22 08:30:50 +08:00
    zioc
        1
    zioc  
       2014-10-14 17:00:26 +08:00
    点“加入收藏”没反应,要点两次,为啥?

    收藏。
    morphinewan
        2
    morphinewan  
       2014-10-14 17:47:05 +08:00
    最大的坑就是到目前为止Swift 1.0还没有稳定,XCode 6.0.1正式版写的工程,到了6.1 GM下,大批大批的编译错误。就是应为苹果的底层SDK还在不停的调整,你妹的,每一个新版本,编译器总是改动若干个接口定义,参数类型什么的。导致你不停的去适配最新的接口定义让自己的程序通过编译。
    hjc4869
        3
    hjc4869  
       2014-10-14 19:45:06 +08:00 via iPhone
    老老实实OC吧。。
    WildCat
        4
    WildCat  
       2014-10-14 19:49:05 +08:00
    已经在用它写V2新版客户端,建议先买喵神那本新书看看。
    coymail
        5
    coymail  
       2014-10-14 20:08:18 +08:00
    @WildCat 哪本书求介绍
    a591826944
        6
    a591826944  
       2014-10-14 20:11:29 +08:00
    @WildCat 同求
    san3ye
        7
    san3ye  
       2014-10-14 20:15:32 +08:00
    如果是练手,随便玩。如果是严肃项目,还是objc..
    WildCat
        8
    WildCat  
       2014-10-14 21:06:00 +08:00
    @a591826944
    @coymail

    http://swifter.tips/buy
    kily
        9
    kily  
       2014-10-14 21:15:28 +08:00
    @san3ye 请问除了接口会变动还有遇到过什么坑吗?据说 swift 也是先编译成 obj-c 再运行的。感觉起来还是挺方便的。
    WildCat
        10
    WildCat  
       2014-10-14 21:23:01 +08:00   ❤️ 1
    @kily 根本不是编译成OC,独立的运行时。
    接口变动会增加成本 本身就是个很大的坑
    onevcat
        11
    onevcat  
       2014-10-14 21:27:31 +08:00
    挺不稳定的...用 Swift 1.1 写了个 app 玩,结果现在还不能用 Xcode 6.1 GM 发布。想开个分支改成 Swift 1.0 的,发现太麻烦..于是等过两天 Xcode 6.1 正式版出来再说吧-。-

    自己的小项目用的话不错,如果是要和别人合作或者是比较大的项目的话最好先缓缓..
    kily
        12
    kily  
       2014-10-14 21:34:53 +08:00
    @WildCat 哦,我又搜了下,确实是编译成 bit-code ,但是和 OC 是相同的 runtime。

    http://stackoverflow.com/questions/24052386/does-swift-compile-to-native-code

    看来最大的问题还是接口不稳定,多谢。
    onevcat
        13
    onevcat  
       2014-10-14 21:47:23 +08:00   ❤️ 3
    @kily 所谓“相同的运行时”更多地也只是 Apple 为了说明 Swift 可以兼容 objc runtime..其实里面不太一样。当前来说 Swift 的 runtime 是 bundle 进 app 里的,整体是在 objc 的上层 (如果你用到 objc 的特性的话)
    hustlzp
        14
    hustlzp  
       2014-10-14 23:09:18 +08:00
    我的感觉是先学着Swift,等到稳定了再写App。
    pH
        15
    pH  
       2014-10-15 08:27:56 +08:00
    真是有点坑爹,就在想万一苹果萎了。这语言,就几乎白学了
    PrideChung
        16
    PrideChung  
       2014-10-15 09:48:02 +08:00
    对我来说最大的坑是Xcode居然还不支持Swift的重构。反正我下定决定用Swift了,有什么问题大不了切回objc。
    jseanj
        17
    jseanj  
    OP
       2014-10-15 10:22:46 +08:00
    @WildCat 买了好几本Swift的书,但是语言本身带来的问题确实是大问题
    jseanj
        18
    jseanj  
    OP
       2014-10-15 10:23:52 +08:00
    @PrideChung 这个我也发现了
    WildCat
        19
    WildCat  
       2014-10-15 10:38:59 +08:00
    @jseanj
    好几本?我真不知道当下有什么书(除了喵大的)值得买。但是你如果说你买的是 Swift开发指南 Swift权威指南,我只能呵呵了。
    jseanj
        20
    jseanj  
    OP
       2014-10-15 11:26:05 +08:00
    @WildCat 买了喵神的和objc的,当然不是国内的某人了,呵呵
    WildCat
        21
    WildCat  
       2014-10-15 11:52:24 +08:00
    @jseanj 感觉不用买太多,不写是无法把坑踏平的
    DaXueBa
        22
    DaXueBa  
       2014-10-16 10:22:47 +08:00
    额!!!!这个不知道怎么样?http://pan.baidu.com/s/1nhM9K
    anson0370
        23
    anson0370  
       2014-10-16 16:52:09 +08:00
    就等明天 release 然后 AppCode 跟进果断买一个开搞了……
    wezzard
        24
    wezzard  
       2014-10-22 07:44:10 +08:00
    運行時太弱;Objective C的Swift包裝與Swift原生類型有capabilities上的差別;蘋果的很多protocols裏面定義的getter方法不能使用property來實現,必須要用函數;想使用NSString的UIKit Addition要麼cast,要麼自己寫一個String類型的extension wrap一下;另外,不能在不同的模組對一個Swift類型進行public接口的擴展;與C交互略爲繁雜;表達式冗長會報錯,強制要求拆分成幾個表達式再運算。
    wezzard
        25
    wezzard  
       2014-10-22 08:30:50 +08:00
    準確的說是針對泛型類型,不能在不同的模組對一個Swift類型進行public接口的擴展
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3998 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:23 · PVG 18:23 · LAX 03:23 · JFK 06:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.