有没有大佬能概述下 ios 中 Swift 开发 APP 的认知框架?

2020-12-17 11:43:22 +08:00
 uswood
背景:只学过 python,也因为生活原因没有很深入地具体做出什么东西来,只是把语言基础,bs4 这种框架学了玩了下。UI 制作也停留在 VB 那种拖空间画出来的概念上。。

非常好奇,像 swift 这种开发 IOS 的 APP,到底是怎么做出来的?

1 、市面上几乎没有或者过于老旧关于 swift 的书,也就是说大家都是看 swift 的文档?
2 、swift 制作 ios 的 app 也是有各种框架用吗?官方的框架还是。。
3 、是不是 swift 写数据处理的东西,然后套上一个 UI 就行了,这个 UI 是要写屏幕参数一样的代码一行一行写出来的吗,有的 app 还有各种动画效果,这是框架还是。。。

希望有大佬能帮助建立一个大题的认知。。谢谢
2065 次点击
所在节点    程序员
8 条回复
maxmak
2020-12-17 12:09:13 +08:00
官方的框架
有拖控件的
laowudxf
2020-12-17 13:13:39 +08:00
这题我会,iOS 开发 5 年
开发 iOS 的框架的话就一个苹果官方的一套,UI 都是基于 UIKit 这个官方框架的,现在大部分都流行纯代码写 UI 页面,也支持可视化写页面,布局的话也是代码和可视化都支持的,动画的话也是可以用代码写的,音视频处理的话也有官方的框架,网络的话会喜欢用第三方的封装好的框架,基本底层也都是基于苹果的网络库,数据持久化方面,支持简单的文件归档存储,和轻量数据库 sqlite 以及苹果的 orm coredata 。
关于软件架构的话,苹果官方的 UIKit 都是基于 MVC 架构,也推荐大家使用 MVC 架构,另外也流行 MVVM,不过 MVVM 的架构大家用起来各有各的实现,封装起来比较麻烦。
honghaoz
2020-12-17 14:10:39 +08:00
用 SwiftUI,简洁明了。这是 Apple 定下来的 UI 框架未来。数据层用 Combine/RxSwift 。MVVM pattern 就挺好。
uswood
2020-12-17 15:02:44 +08:00
@maxmak 谢谢!

@laowudxf 谢谢懂了~学到了

@honghaoz 谢谢~去搜一下
PerFectTime
2020-12-17 15:22:42 +08:00
uswood
2020-12-18 15:12:42 +08:00
@PerFectTime 真的哇塞,谢谢!!
agagega
2021-03-02 00:59:50 +08:00
刚学 iOS 不久,以我自己的理解给前面的 V 友补充一下,先说楼主的问题吧:

1. Swift 现在的大版本号是 5,语法到 4 才基本稳定下来,前几个大版本差不多更新一次旧的代码就编译不过了,所以网上或者书里的很多 Swift 资料现在拿过来不一定是对的,OC 其实没有这个问题。

学 Swift 入门的话看到一些资料用的 OC 可能看不懂,但学过一点 Java 或者 C++的话花点时间看一下 OC 的语法也不难,不要求会写,能大概看懂意思就行,这样对学 Swift 也有帮助,比如 Swift 调用方法的语法感觉就明显是在向 OC 兼容。

国内 iOS 用 OC 的还是很多(其实是因为新项目少了吧),但这两年苹果推的框架都是 Swift 写的,Swift 已经慢慢变成熟了。苹果的文档的确不太行,面向 StackOverflow 编程吧。而且我总觉得网上 iOS 资料明显没有前端来得丰富。

2. 官方支持的框架有两个,一个是 UIKit,一个是 SwiftUI 。UIKit 是 iOS 起初就有的; SwiftUI 是 19 年 WWDC 才发布的,20 年开始完善一些,基本能达到能独立写简单小项目的程度。但不了解 UIKit 直接上 SwiftUI 有点类似不懂原生 DOM 直接学 React,遇到坑是必然的,所以还得回头看 UIKit 。当然其他一些技术,比如 Flutter/ReactNative 还有网页套壳之类的都可以开发,体验可能赶不上纯原生。

SwiftUI 的特点是 MVVM,就像前端那几个框架,数据流动的顺序变清楚了,可以少很多不必要的代码(和 bug )。UIKit 是 MVC,也就是你定义好了界面之后,界面里的组件会关联一些 Controller,它们负责加载数据或者处理各种点击事件、切换页面之类的。

这些处理可能是通过重写 Controller 基类的回调,或者实现某个组件的 Delegate (就是接口的意思),也有可能通过 Notification (系统传递消息的机制,不是用户收到的那个消息)或者直接继承组件对应的类来做。说起来是 MVC,但我感觉框架并没有对如何组织代码做太多明确限制。这个听起来很抽象,跟着教程做过两个 Demo 就懂了。(苹果官方以前有个教程,现在扔 Archive 里了..)

然后在界面之外 iOS 有很多很多功能框架,比如相机的、定位的、人工智能的,这里有些可能和界面都没多大关系。

3. SwiftUI 的界面是代码写的,但很清楚,比较容易改。UIKit 的话有两种方法,一种是用代码自己实现,另一种是在 Storyboard 里拖控件。拖控件可以避免写很多繁琐的代码,属性和布局啥的在窗口里自己调,然后可以把控件和代码里的一个对象关联起来,在运行的时候就可以用这个对象操作它。动画也是框架提供的,iOS 的 API 对动画考虑得很周全。UIKit 比较麻烦的一个东西是布局,因为从手机到平板尺寸都不一样,所以有个 autolayout 机制,通过约束来确定组件的位置和大小,这个不难理解但用起来还挺烦的。

另外 SwiftUI 肯定是未来的方向,iOS14 的小组件都只能用 SwiftUI 写了,虽然等它完善可能还要好多年。它的大优势是写一套代码可以在手机电脑多个平台上面用。
uswood
2021-04-17 10:28:42 +08:00
@agagega 感谢! 一直没来,现在才看到,最近学了 swift 和跟着教程做了一次,大概能理解你说的这些了,因为初上手做实际的项目,确实太多坑了。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX