1
maxmak 2020-12-17 12:09:13 +08:00
官方的框架
有拖控件的 |
2
laowudxf 2020-12-17 13:13:39 +08:00
这题我会,iOS 开发 5 年
开发 iOS 的框架的话就一个苹果官方的一套,UI 都是基于 UIKit 这个官方框架的,现在大部分都流行纯代码写 UI 页面,也支持可视化写页面,布局的话也是代码和可视化都支持的,动画的话也是可以用代码写的,音视频处理的话也有官方的框架,网络的话会喜欢用第三方的封装好的框架,基本底层也都是基于苹果的网络库,数据持久化方面,支持简单的文件归档存储,和轻量数据库 sqlite 以及苹果的 orm coredata 。 关于软件架构的话,苹果官方的 UIKit 都是基于 MVC 架构,也推荐大家使用 MVC 架构,另外也流行 MVVM,不过 MVVM 的架构大家用起来各有各的实现,封装起来比较麻烦。 |
3
honghaoz 2020-12-17 14:10:39 +08:00 via iPhone
用 SwiftUI,简洁明了。这是 Apple 定下来的 UI 框架未来。数据层用 Combine/RxSwift 。MVVM pattern 就挺好。
|
5
PerFectTime 2020-12-17 15:22:42 +08:00
|
6
uswood OP @PerFectTime 真的哇塞,谢谢!!
|
7
agagega 2021-03-02 00:59:50 +08:00 via iPhone 2
刚学 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 写了,虽然等它完善可能还要好多年。它的大优势是写一套代码可以在手机电脑多个平台上面用。 |