gr2302484 发表于 2023-10-17 16:51:29

Apple 未来会让 Swift 替代 Objective-C 吗,需要多长时间成为主流?

苹果的未来主流编程语言绝对是swift,但是目前swift问题还是挺多的,而国内用swift开发的软件真的很少(国外不太清楚),而swift还需要多长的时间才能成为主流?现在的状态是学习OC还是swift?

空气的影子 发表于 2023-10-17 16:52:02

这题我会,作为一个初级iOS开发工程师,我说说我的理解。
Swift一定代表着Apple编程的现在与未来。
我特地看了一下楼主编写这个文章的日期,是2022年,1月份,我很怕我看错了,因为都2022年了,还在讨论Swift是不是主流的问题,就有点太过时的感觉。
首先,Swift在目前的语言升级上不会出现断崖式的变动。我记得我开始接触Swift的时候是2.0,升级到3.0的时候,工程里面报了一堆错,3.0到4.0的时候亦是如此,不过之后基本上都是非常平稳。
然后,Apple自家的Demo示例,目前使用使用Swift编写,不会出现OC了,这基说明了Swift的地位。
再来,说国内外Swift开发的差异,这个我确实承认有,不过国内大厂的开发,目前基本上都是进行混合开发了,OC和Swift同时都存在,这么做完全是历史原因造成了,并不能怪开发,因为重构的代价与成本都不可遇见。据我在技术群里问的一个技术大佬,他们那项目,虽然是OC的工程,不过现在的新业务,全部都使用Swift编写了。
另外,现在公司如果开发新项目,如果是原生项目,iOS这边基本上都会优先考虑Swift,因为Swift的生态、第三方已经都非常完善,桥接到OC的第三方库也非常简单,基本上没有太多成本。
最后,聊一聊Swift的趋势和编程语言本身。目前有很多库,都被Swift独占了,比如Combine,还有一些官方库:

http://pic1.zhimg.com/50/v2-b190a3fc40a4e90048f0f0cc755e6099_720w.jpg?source=1940ef5c
推出的SwiftUI亦是响应式编写UI的一种方式,它虽然目前还不可能完全取代传统Cocoa,不过它也会越来越好。
就目前如果学习Apple这边的开发话,我个人觉得OC的背景知识还是需要一点的,不过直接上Swift进行学习也可以,因为编程语言的学习本来就可以相互借鉴,触类旁通,学习完了Swift在转头看看OC的Runtime等底层也可以。
我也接触学习过其他编程语言,比如Dart,JavaScript,Python,就我个人的经验看,学会了Swift,其他语言上手也非常快。
说白了,编程语言只是一种工具,只是表现自己思路的一种方式,就像说“你好”和“Hello”一样,只是我们需要在合适的场景使用合适的编程语言罢了。
SwiftUI编写一个简单页面:
struct Home: View {
    var body: some View {
      Text("Hello,World")
    }
}Flutter编写一个简单页面:
class Home extends StatelessWidget {
const Home({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
      child: Text("Hello,World"),
      ),
    );
}
}编程语言不是关键,编程思维才更为重要。
另外,这些年iOS开发其实也算不上特别火,除非实力非常突出,否则可能大部分时间都在做UI侠,当UI侠又有混合开发,Uni-app抢饭碗,其实还是很难受的。
如果想入行,可以考虑其他的编程语言。
当然就我个人看,用Swift来学习编程还是很不错的,它简洁易懂,不失趣味。
可以来掘金找我一起交流:
season_zhu 的个人主页 - 文章 - 掘金

ghostlees 发表于 2023-10-17 16:52:40

Apple 是个庞大的组织。组织里每个团体和个人都有自己的目的和利益。作为一个组织,共同目标的号召力和目标本身的 merit 同等重要。我在知乎曾经批评过 C++ 的很多技术缺陷,但是 C++ 在过去几十年里给所有 OS vendor 和 IDE vendor 提供了共同努力的目标,所以 C++ community 仍然是软件开发中最成功的组织。
Apple 内部肯定有一些团队希望 Swift 能替代 Objective-C。但他们必须面对 Objective-C 的庞大遗产。他们有没有具有号召力的手段,让所有团队,或者大多数团队团结在「替代」这个旗帜下?在这个设想的「替代」过程中需要无数人力维护现有的技术。其中个人和小团队都有自己的 self-interest,当他们被赋予维护一个「将被替代」的技术,他们就会反思自己这几年甚至十几年时间的意义。
其中一些人就会失去动力,至少没有开发新技术的动力,他们不仅屈服于新技术势不可挡的现实,而且连维护旧技术的工作也会得过且过。这实际上会阻碍旧技术的迁移进展,让新技术在很多外围领域不得不继续依赖旧技术。而另一些人会坚持更为积极的反对意见,认为「旧」技术的 merit 值得继续探索和发展,他们会不断寻求发声和行动的机会。
Apple 在 2000-2015 左右的开发社区的成功经营,很大程度在于它建立了单一核心,避免了上面的内部斗争。它坚持用 Objective-C 作为开发语言,Cocoa 作为 framework。尽管在 technical merit 上这样做有很多妥协,但是在社区发展上是成功的。
其中最近也是最有争议的例子是用 Objective-C 作为 Metal 的接口语言。Objective-C 效率不佳,但是对精确 memory layout 的操作可以兼容 C,在发展前期,Swift 还未出现之前,Metal 专注于 Objective-C 的策略还算是成功的。但是 Swift 出现之后,Metal 的发展也产生了路线摇摆。要不要迁移到 Swift?但是 Swift 对精确 memory layout 操作还有短板。要不要迁移到 C++?但 Swift 和 C++ 的互操作也不成熟。
Swift 和 C++ 的关系如何?在 Objective-C 时代,Apple 对这个问题就进行了艰难探索。一开始是打压 C++,因为 Objective-C 兼容 C,而它的 OO 模型又比 C++ 简洁。但是无奈不成功。最后发展出了 Objective-C++ 这个技术。Objective-C++ 和 Objective-C 本身也存在内部斗争,但是随着 C++14 等技术能无缝衔接 Objective-C 原有概念,Objective-C++ 还是占据了上风。
现在 Swift 要自己开发和 C++ 的 FFI 吗?这个问题很难回答。首先它必须保持和 Objective-C,至少是 plain C 的互操作。那么 Objective-C++ 的支持团队就可以直接说用 Objective-C++ 作为 FFI。但是你能想像 Objective-C++ 团队会甘于做一个 FFI 支持的团队吗?不会,它一定会寻求机会继续扩大影响力。
所以 Apple 的不同技术之间,只能是一种拉锯式的争夺。所谓分工明确的合作是理想化的。每个团队都不会甘于承认自己的 merit 只配给其它团队的技术做外围。
Jobs 时代 Apple 一枝独秀,很大程度在于 Jobs 能成功的让 Apple 接受单一技术内核的妥协,避免内部斗争。同时期的 Microsoft 则有三种不同的 mobile 策略(Windows CE,Windows Phone,Zune),和至今互相竞争的 UI frameworks。而 Jobs 时代结束后 Apple 也不出所料的陷入了大组织的通病。作为 Apple 这样的技术巨人,自创语言是自然的,能克制才是罕见的。同样的事情也发生在 UI frameworks 中。UIKit,UIKit for Mac (Catalyst),AppKit,SwiftUI 形成了竞争的乱相。当然,Apple 目前的 CTO/CEO 并不是不知道多种技术竞争的劣势,但是他们面对这个庞大组织的内部利益,必须接受一定程度上的丛林法则,而不能像 Jobs 这种个人魅力百年难遇的人一样靠自己的 vision 来实现。今天的 macOS/iOS 开发者是 Apple 内部的丛林竞争中的一个配角。

weigogo 发表于 2023-10-17 16:53:37

你指的是哪个版本的Swift,不妨把话说明白些。

kangsi-111 发表于 2023-10-17 16:54:25

将来主做ios开发的话,肯定是swift的天下,这个没啥好说的
但是我建议你,不要把自己局限在ios这个天地里面,都是工具而已
你管它那么多,能用就行,所以flutter和swift建议都看看,其实把java,kotlin也给看看,问题也不大
有啥呀,无非那点东西,这些语言都差不多的,大部分特性都在互相抄

weber 发表于 2023-10-17 16:55:08

看了回答,大概都是一群人在不愿承认的现实中挣扎……
才疏学浅,就非得赖语言的这不是那不是
有这时间还不如多学习学习
做了6年开发的我,一开始我也排斥swift,后来学习了半个月,才发现swift的魅力,尤其是各种便捷的表达式,和可选链。swift5逐渐成熟,混编很容易,很少遇到兼容问题。
唯一不足是swift不支持runtime,想要使用需要加@objc注解,但是日常开发我觉得够用。
当你抱怨这个不好那个不好的时候不如静下心啦学一学,代码写多了就觉的都是大同小异。
上个月刚看完Flutter,如今使用Flutter开发的双端项目已经上线,这对我来说,成本只需要一个月。
oc开发者,总是怕被swift,Flutter取代,所以总是做一些无用的挣扎,有这个时间,为何不去学习学习。
页: [1]
查看完整版本: Apple 未来会让 Swift 替代 Objective-C 吗,需要多长时间成为主流?