但接觸一段時間后,我發(fā)現(xiàn),其實并不是想象中的那樣。微信小程序不可能替代原生 app,也沒有絕對的優(yōu)勢戰(zhàn)勝原生 app。不過,微信小程序固然有它的好處,比如我們需要用到的那些不常用的服務(wù)。對于小企業(yè)來說,小程序可以讓他們更便捷地宣傳他們的服務(wù),或是給顧客一個更好的線下體驗。那么對于一個 iOS 開發(fā)的成員來說,開發(fā)小程序會有哪些挑戰(zhàn)呢?最基本的 iOS 開發(fā),大致會有以下流程:小程序的開發(fā)流程,完全可以按照開發(fā)一個原生 app 的流程進行,我也是按照這個流程入門小程序的。總體感覺沒那么復(fù)雜,只要你靜下心來仔細的去研究,那對你來說,開發(fā)一款微信小程序是很容易的。我們使用 Xcode 進行 iOS 開發(fā),下載直接安裝,新建一個項目,即可運行。微信小程序使用官方提供的微信 Web 開發(fā)者工具,下載安裝后即可創(chuàng)建項目。但創(chuàng)建項目時,需要微信授權(quán)登錄。同樣,創(chuàng)建項目的時候微信提供了一個模板,打開項目即可看到實時預(yù)覽的效果。不過這里有一個比較坑的問題是,啟動開發(fā)者工具時,不能鏈接 VPN。我建議,打開微信 Web 開發(fā)者工具前,先主動關(guān)閉 VPN,等項目啟動后再打開。對于 iOS 開發(fā)者來說,UI 布局可以使用坐標(Frame)來直接布局一個視圖,也可以使用自動布局。對于微信小程序開發(fā),建議使用 Flexbox 布局。這是一種不一樣的布局方式。Flexbox 布局,也叫彈性布局,是 CSS3 提出的一種布局解決方案。RPX 的全稱是 responsive pixel,它是小程序自己定義的一個尺寸單位,可以根據(jù)當前設(shè)備屏幕寬度進行自適應(yīng)。小程序中規(guī)定,所有的設(shè)備屏幕寬度都為 750 rpx,根據(jù)設(shè)備屏幕實際寬度的不同,1 rpx 所代表的實際像素值也不一樣。關(guān)注知曉程序(微信號 zxcx0101),回復(fù)「rpx」,一篇文章帶你看懂 RPX。利用 Flexbox,只需要幾行代碼就可以搞定下面這樣的布局。關(guān)于 Flexbox 布局,這里不做更多的解釋。有興趣的同學(xué)可以找相關(guān)資料。WXML 文件:
WXSS 文件:
如果想做一個列表,只能用 scroll-view
。但它特別好用,我們只需要把你創(chuàng)建的視圖添加到 scroll-view
標簽中即可,你甚至不需要計算子視圖的高度。對于這個頁面,Obj-C 下會如何實現(xiàn)呢?這一點已經(jīng)夠 iOS 開發(fā)者想半天了。看看小程序的實現(xiàn)吧,看完后,你絕對有想學(xué)小程序的沖動,而且它的流暢度也不亞于原生應(yīng)用,只是第一次進入時稍微慢點。WXML 文件:
WXSS 文件:
看到了嗎,就需要這么幾行代碼,而且圖片也會自動加載、自動等比縮放。是不是覺得很簡單呢?通過以上的例子,相信讀者朋友已經(jīng)大體上明白了 FlexBox 布局的基本邏輯。對于 UI 布局來說,微信小程序的思想值得我們借鑒,主要有以下幾點:各個文件分工明確:WXML 負責頁面的布局,也就是布局文件。
WXSS 負責每個視圖的樣式,比如字體大小等樣式。
JS 監(jiān)聽并處理小程序的生命周期函數(shù)、聲明全局變量,數(shù)據(jù)都在這里。
布局簡單:創(chuàng)建界面的時候,微信小程序更加簡單,而且會自動適配屏幕。不過,建議使用 RPX 為單位。系統(tǒng)提供了常用的控件:系統(tǒng)提供了我們常用的控件,這樣,搭建界面的時候會省很多事。既然布局這么簡單,iOS 方面會不會也有這中布局方式?果不其然,我找到了 Yoga。它是 Facebook 實現(xiàn)的一個庫,有興趣的讀者可以研究一下。對于 iOS 開發(fā)來說,網(wǎng)絡(luò)層的設(shè)計絕對是很重要的一部分,網(wǎng)絡(luò)層設(shè)計的好會直接關(guān)系到應(yīng)用的好壞,還有將來的維護成本。不過好在,有一些優(yōu)秀的三方庫,幫我們解決了很多問題,比如 AFNetworking,YTKNetwork 就是基于 AFNetworking 的封裝。為了降低開發(fā)難度,微信小程序已經(jīng)為我們做了網(wǎng)絡(luò)層的封裝,但網(wǎng)絡(luò)訪問必須通過 HTTPS 協(xié)議。調(diào)試環(huán)境下,HTTP 協(xié)議也可以請求成功,但會有警告。以下是我寫的一個網(wǎng)絡(luò)請求:
iOS 中,頁面跳轉(zhuǎn)常用的函數(shù)有 UINavigationController
與 Modal
形式跳轉(zhuǎn)。而在小程序當中,我們使用官方提供的接口進行頁面跳轉(zhuǎn)。以 wx.navigateTo(OBJECT)
為例來說明。url
是要跳轉(zhuǎn)到頁面的路徑,nam
e
是給下一個頁面?zhèn)鬟f的數(shù)據(jù)。這樣做,就如同 iOS 中的 Push
。相信有 iOS 的基礎(chǔ)的人,理解這個概念是很容易的。
iOS 中,可以為視圖添加一個事件,比如點擊事件。而小程序中,也可以給視圖添加事件,而且可以攜帶一些參數(shù)。bindtap
后的 bindMen
u
為視圖綁定的事件名,data-name
中的 name
為事件傳遞的參數(shù)。
我們只需要在 .js
文件中實現(xiàn)函數(shù):
這樣就形成了一個綁定,點擊事件后直接把數(shù)據(jù)傳遞到了 .js
文件中,這樣大大降低了耦合度。想想看,iOS 中如何實施這樣的實現(xiàn)呢?iOS 中,我們可以使用 Sqlite、Realm、NSUserDefault 等,對數(shù)據(jù)做緩存處理。而小程序中,我們使用 Storage 接口,對數(shù)據(jù)做緩存處理。每個微信小程序都可以有自己的本地緩存,可以通過 wx.setStorage
(wx.setStorageSync
)、wx.getStorage
(wx.getStorageSync
)、wx.clearStorage
(wx.clearStorageSync
),對本地緩存進行設(shè)置、獲取和清理。本地緩存最大為10MB。這篇文章,主要是為了幫助讀者了解小程序的開發(fā)過程。小程序的開發(fā)過程,大體上與 iOS 的開發(fā)過程上一致。當然如果你有 RN 或者前端開發(fā)經(jīng)驗,學(xué)習(xí)小程序會更容易。那么移動端開發(fā)者,如何學(xué)習(xí)小程序開發(fā)呢?我建議讀者,先學(xué)習(xí)一下 JavaScript、CSS 和 HTML。