现在感觉 Swift 真的被 OC 拖后腿了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
usVexMownCzar
V2EX    Swift

现在感觉 Swift 真的被 OC 拖后腿了

  •  
  •   usVexMownCzar 2023-04-07 14:52:17 +08:00 3561 次点击
    这是一个创建于 916 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近接手了公司一个项目,看了几天,发现一个用 Swift 开发的项目,但是所有的数组,字典类型用的全是 OC 中的类型,NSArrayNSMutableArrayNSDictionaryNSMutableDictionary

    每次看到从这些类型中取值、设置值都很头疼(好几年没写 OC 了):

    var dict = NSMutableDictionary() dict = NSMutableDictionary(dictionary: te as! NSDictionary) dict.setValue("\((index as! NSDictionary).object(forKey: "foo")!)", forKey: "foo") 

    完全不使用 Swift 的语言特性,一些高级函数都无法使用,关键这是一个 Swift 项目。

    虽然其中有一些是从 16 年就有的代码,但是最近开发的功能还这么做,就很无语。

    就像是用 TypeScript 进行项目开发,但是所有的类型都是 Any

    诶,什么时候 Swift 能把 OC 踢出去呀

    11 条回复    2024-02-24 09:51:20 +08:00
    paradoxs
        1
    paradoxs  
       2023-04-07 14:53:52 +08:00
    公司还让你们用 swift 啊,, 现在不都是一套代码,所有平台一起编译吗
    pocarisweat
        2
    pocarisweat  
       2023-04-07 15:59:26 +08:00
    只要 OC 及苹果底层用 OC 写的那堆东西还在,OC 就不会被淘汰的,那 Swift 和 OC 互操作就是刚需。

    况且 OC 的理念其实也不落后,只是和 Swift 语言上确实格格不入,Swift 是更接近 Rust/C++这类风格的语言。苹果这几年的新 API 都是 Swift Only 的( SwiftUI 、Combine 、CryptoKit 、TextKit2 ),明显是要给以前 NS 开头的 OC API 慢慢加上 Swift 的版本。但还有得改呢
    usVexMownCzar
        3
    usVexMownCzar  
    OP
       2023-04-07 16:07:18 +08:00
    @pocarisweat ,烦哦,之前写都没有这个感觉,因为全部都是 Swift ,也就用下 OC 的库。但是这次真的,真的看着累,写着更累
    8888888888
        4
    8888888888  
       2023-04-07 22:47:11 +08:00
    借楼问一下,TabView onChange 没法触发 matchedGeometryEffect 的动画吗?
    hstdt
        5
    hstdt  
       2023-04-09 19:24:07 +08:00 via iPhone
    这个和 oc 有啥关系,不过是用 swift 用的太烂了
    usVexMownCzar
        6
    usVexMownCzar  
    OP
       2023-04-09 21:14:06 +08:00
    @hstdt 我问他为什么要用 OC 的类,他说这有什么问题吗
    chipmuck
        7
    chipmuck  
       2023-04-22 02:18:16 +08:00
    在 Swift 中使用 NS- 的集合对象我觉得完全没有问题,这些集合对象都是 value type ,如果想要使用 reference type ,就要使用 Foundation 中的集合(在 https://developer.apple.com/videos/play/wwdc2018/229/ 也提到了两种不同结构集合的用法)。
    usVexMownCzar
        8
    usVexMownCzar  
    OP
       2023-04-22 20:45:12 +08:00
    @chipmuck 有问题的,swift 主打的是静态类型安全,使用 NS 的集合,遍历的时候,元素类型全是 Any ,需要使用的时候就得做强制解包,而 app 崩溃最多的原因就是强制解包失败引起的崩溃。

    比如:let arr: NSArray = [1,2,3,4]
    然后使用 filter 进行筛选大于 2 的元素

    arr.filter { el in
    el > 2
    }

    这个时候是有错误提示的,Cannot convert value of type 'NSArray.Element' (aka 'Any') to expected argument type 'Int'

    必须这样写才可以

    arr.filter { el in
    el as! Int > 3
    }

    这还是简单的,我在公司的项目里面看到的比这恶心多了。

    比如这样的:

    var dict = NSMutableDictionary()

    dict = NSMutableDictionary(dictionary: te as! NSDictionary)

    dict.setValue("l((te as! NSDictionary) . object(forKey: "max_ limit")!)", forKey: "to_ _max_ limit" )

    te 是个 NSArray 中的一个元素

    如果 API 返回了一个错误的类型,app 就会崩溃。
    sl0000
        9
    sl0000  
       2023-04-23 20:10:52 +08:00
    OC 永远都不会被扔掉的。
    HeMinWon
        10
    HeMinWon  
       2024-01-10 20:51:47 +08:00
    新功能尽量使用 Swift 的语言特性,与已有项目做好代码隔离
    worldhandsomeboy
        11
    worldhandsomeboy  
       2024-02-24 09:51:20 +08:00
    为了纯 swift 开发一个项目,OC 方面的能不用就不用,如 NS-这些。一些常用的功能使用 swift 手撸凑合用,就是为了方便对 swift 的了解。他这个是对 swift 了解的还不多造成的。
    关于     帮助文档     自助推广系统     a href="https://blog.v2ex.com/" class="dark" target="_blank">博客     API     FAQ     Solana     894 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:58 PVG 03:58 LAX 12:58 JFK 15:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86