SwiftUI踩坑记
2021/4/141481
最近将一款位图字体软件从Adobe AIR改写成SwiftUI版本,可谓是踩坑无数;
这个帖子用来记录不同UI库/技术体系的BUG和可用性对比,具体的UI库/技术体系列表:
- Adobe AIR:之前写的小软件都是用这个, 所有平台的非ui api完全一致,默认api非常丰富且稳定,并拥有非常多的ui库,比如Feathers Baseon Starling、AsWing等等,坏处是Flash已死,AdobeAIR也交给其他公司(好像是三星)维护了;
- Flutter 谷歌的UI库这个基本就只是UI库,不同平台的非ui api不一致且缺乏,几乎完全依赖第三方开发平台相关api,唯一的优点就是Dart语法和Flutter的陈述式UI
- Electron 利用WebView做界面,可以使用丰富的Js以及NodeJs库,也可以使用TS,界面效果采用css非常方便,唯一缺点就是不支持手机App
- SwiftUI 缺点就是Swift语言的标准库api和其他语言大相径庭,并且SwiftUI有很多奇怪的坑,好处是支持Apple所有平台
总结一下:除了SwiftUI调用原生平台api非常方便, 其他平台都需要额外熟悉原生平台开发
因为这些年一直在用Mac|iPhone,所以暂时没有选择Electron(这个也简单,就是包体大外加不支持手机), 而是选择了越发完善的SwiftUI。
位图字体软件作为SwiftUI入门系列,下一步如果没放弃的话,会做一些(游戏编辑器、实用iOS App)等等
SwiftUI坑:
- 很难想象文件拖拽时过滤不支持的文件类型, 在mac平台异常困难(twt也很多人问),这在Adobe AIR是分分钟简简单单的事情
- ForEach 与@Binding<T> 共用导致的列表长度变化出现 Index out of range 问题,这个在vuejs是没见过,twt有解决方案,但是不优雅,这种事情应该期待Apple解决,等今年6月份的WWDC看看吧;
{{likeDisplay}}