GitHub 鏈接:SwiftUI-WeChatDemo
第一章:剖析:如何用 SwiftUI 5天組裝一個微信 —— 聊天界面篇
第二章:剖析:如何用 SwiftUI 5天組裝一個微信 —— 通訊錄發現我篇
效果圖
實裝內容
- 4 個 Tab 頁面 + 聊天界面,使用純 SwiftUI 搭建而成
- 應用啟動界面 Launch Screen
- 國際化及應用內語言切換功能
- Combine 使用場景(聊天界面簡易對話功能)
- 極度簡化的 MVVM 架構
- 邏輯部分純 Swift5 書寫,幾乎不涉及 OC 類及 UIKit 庫
- 不使用第三方框架(除了 SwiftGen 提供便利)
難點
- 在聊天界面中隱藏 Tabbar(未能實現)
- 聊天界面中信息滾動功能,尤其動畫滑動效果難以實現
- 保持鍵盤焦點,不自動隱藏(有望在 SwiftUI 3 后實現)
- 發現頁圖標的動態顏色指定(實現起來障礙較大,多番嘗試發現無法簡單地將 Color 和 一眾漸變色類型 存儲到單一變量,並且 View 比較難以擴展,語法糖副作用嚴重)
- SwiftUI 原生視圖難以完美復刻微信原生界面(尤其是聯系人頁),判斷是微信使用了大量自定義視圖
- Tab 按鈕添加紅點(無法實現,SwiftUI 原生視圖僅接受 Image 和 Text,對 Modifier 的修改直接忽略)
- SwiftUI 中 Combine 的使用(通過 ObservableObject 構造 ViewModel 實現)
- 應用內語言切換(通過 自定義配置 SwiftGen 實現)
坑
- SwiftUI2 中缺乏視圖焦點控制方法(該部分將在 SwiftUI3 中提供)
- SwiftUI 中使用 switch 語法時,會導致自動提示失效,但編譯能順利通過,判斷是 Xcode 問題
- 目前在書寫 SwiftUI 時遇到語法使用錯誤等情況,偶爾會出現 Xcode 提示未知錯誤,建議報告 bug(因為逐行書寫,基本都能猜出問題所在)
彩蛋
應用內包含微信聯系方式,歡迎同行交流(本人是 Android 攻城獅..)