有没有大佬能概述下 ios 中 Swift 开发 APP 的认知框架? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
uswood
V2EX    程序员

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

  •  
  •   uswood 2020-12-17 11:43:22 +08:00 2499 次点击
    这是一个创建于 1784 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:只学过 python,也因为生活原因没有很深入地具体做出什么东西来,只是把语言基础,bs4 这种框架学了玩了下。UI 制作也停留在 VB 那种拖空间画出来的概念上。。

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

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

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

    @laowudxf 谢谢懂了~学到了

    @honghaoz 谢谢~去搜一下
    uswood
        6
    uswood  
    OP
       2020-12-18 15:12:42 +08:00
    @PerFectTime 真的哇塞,谢谢!!
    agagega
        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 写了,虽然等它完善可能还要好多年。它的大优势是写一套代码可以在手机电脑多个平台上面用。
    uswood
        8
    uswood  
    OP
       2021-04-17 10:28:42 +08:00
    @agagega 感谢! 一直没来,现在才看到,最近学了 swift 和跟着教程做了一次,大概能理解你说的这些了,因为初上手做实际的项目,确实太多坑了。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1345 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:58 PVG 00:58 LAX 08:58 JFK 11:58
    Do have faith in what you're doing.
    ubao msn 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