SwiftUI踩坑记

ToolSwiftSwiftUI2021/4/14341

最近将一款位图字体软件从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坑: 

  1. 很难想象文件拖拽时过滤不支持的文件类型, 在mac平台异常困难(twt也很多人问),这在Adobe AIR是分分钟简简单单的事情
  2. ForEach 与@Binding<T> 共用导致的列表长度变化出现 Index out of range 问题,这个在vuejs是没见过,twt有解决方案,但是不优雅,这种事情应该期待Apple解决,等今年6月份的WWDC看看吧;