对于初学代码的我来说,掌握类和属性已经花了我很长时间才搞懂。

从大学时就有一个自己开发软件的愿望,但是看到蚂蚁一般的密密麻麻的看不懂的英文字符,加上专业课的些许压力,便把这个愿望放在了心里。直到后来做电商设计,做产品规划,发现都不是我擅长的,我很想亲手把自己的规划实现出来,不依赖于任何别人的技术或者审美。当我决定实施这一构想时,我已经全职在家准备研究代码,进入程序员的世界了。
不可否认的是,现在即使 App 做了出来,我对于 Swift 语言其实还是初入门的程度,大多数方法都是已经有的,我只是过了实现我的功能搬运了过来为我所用。但最后的结果显然还不错。
开端
关于天气预报,我一直用的是彩云天气,对于彩云的精准度以及使用习惯已经摸的很透彻,功能上来说,我个人觉得非常重要的一个是昨日天气一定要有,这样才会有一个更直观的温度对比。
在搜寻了很多免费 API 之后,我锁定了 OpenWeather ,一个强大的既可以提供当日天气和七日预报,又可以提供昨日天气的 API ,美中不足的是国内的话只支持主要城市,不过对于我目前的计划已经够用了。另外,使用了和风天气来提供降雨描述,和风天气也是一个质量很不错的api提供者。
架构与UI设计
之前一直对 MVVM 模式有所耳闻,这次也想运用上,于是在浏览了一些资料之后对于这个模式有了一定了解,接下来就是把 API 请求来的数据变成自己 App 可使用的数据,然后建立可视化设计,把数据绑定到画面中。在绑定前需要建立与视图对应的数据,于是我花了一晚上的时间把UI设计做了出来。

实现过程
我是在编写数据模型的过程中逐渐理清思路的,也可以说是给自己不断加需求的过程。在寻找解决方法的同时经常会看到新的功能,在权衡利弊之后对自己原来的需求有所增删。比如手动添加城市,拖拽删除,下拉刷新,每次以为项目就要结束了,又出现了新的目标,但我偏偏是有了目标就想拼命实现的那种人。😩

在界面方面我使用了 SwiftUI ,不得不说真的非常新手友好了,在使用的过程中我了解了闭包这一特殊的方法表现形式,也掌握了初步使用UIKit的经验(主要是为了弥补 SwiftUI 的某些不足)。第三方库方面,用到了 Lottie Animation,用来加载空状态下的动图。
定位方面,使用了 CLLocation ,利用经纬度获取城市信息以及请求api获取相关天气信息。
本地存储方面使用了 UserDefaults 。
重新审视设计
过程中与身边的设计师商讨,把UI和交互几乎推翻了,只保留了原来的数据结构,用了几天时间把主页改成了卡片式设计,这样风格更加简洁优雅。

在这一版中,为了打造沉浸式体验,把展示和交互作为了第一目标,视觉上更加耐看。
总结
对于新手来说,我觉得最困难的是找到了解决方法但是自己用着出错,在战战兢兢和亦步亦趋中找到正解,如果能成功便是天大的荣幸。我也相信随着我的经验越来越丰富,我对代码语言的掌控力也会越来越自如,对底层逻辑的掌握也会越来越深刻。
这一版本把我目前想实现的功能基本都实现了,接下来就是使用和优化了。在这个过程中认识了各种各样的老师(youtube上的大神们真的是帮助太大了),我也希望继续在这条路上走下去。
如果你也喜欢我的设计,可以在下方留言,也欢迎提出其他意见。
如果你想让我加入你的团队,也请联系我以进一步洽谈。