Swift Design Pattern 系列教程 #3:外觀模式 (Facade) 與轉接器模式 (Adapter)
本教程是設計模式 (Design Patterns) 系列的第三部分,從本系列的第一篇文章開始,我們研究了「創建」類別的工廠方法模式 (Factory Method) 與單例模式 (Singleton) 兩個範例,第二篇文章則討論了「行為」類別的觀察者模式 (Observer) 與備忘錄模式 (Memento) 兩個範例。 在本次教學中,我將會解釋屬於「結構」類別的兩個範例:外觀模式...
View ArticleiOS 開發者求職指南:善用 2000 小時作準備 讓你在今年成功獲聘
耗費了我三個半月的精力,最後我還是沒有得到那份工作。 我學習了那間公司的一切,公司的事彷彿都變成了我的事。我連公司每個創辦人在網上發布的內容都一清二楚。 我將它浪漫化了太多。 我寫了大量的部落格文章,裡面包含了實際的程式碼和範例,闡述如何可以改善他們的 App。儘管我投資了這麼多精力,我必須說,要獲得一份工作實在是非常不容易。雖然我以前不相信這回事,但這樣說出來讓我感到安慰一點。...
View ArticleARKit 2.0 教學:儲存並恢復世界地圖數據 建立更連貫的 AR 體驗
歡迎來到第 8 回 ARKit 教學系列的文章! 隨著 iOS 12 的發佈,現在 ARKit 能夠儲存世界地圖 (World Map) 的數據了。 以前,我們無法儲存 AR 世界地圖的數據,現在 iOS 12 讓開發者能夠建立儲存 AR 體驗的能力。 若你有興趣學習建立在擴增實境 (Augmented Reality, AR) 中儲存世界地圖數據的 App,這篇教程你就不容錯過了。...
View Article程式語言基礎:認清 Swift 數值型別 (Value Type) 與參考型別 (Reference Type) 的差別
數值型別 (Value Type) 與參考型別 (Reference Type) 的差異是所有程式語言的基礎。大部分開發者都可能是從 C 語言開始程式設計生涯。如果你還記得傳值 (Call By Value) 與傳參考 (Call By Reference) 函式的話,那麼你大概知道我的意思。讓我們來看看 Apple 怎麼說。 就如標題所說,Swift 中的型別可以分為兩種類型: 數值型別 ──...
View Article一步一腳印的 iOS App 上架和更新流程
什麼都是假的,只有 App 上架 Store 才是真的。畢竟我們都不是吃素的,費了九牛二虎之力,千辛萬苦完成 App 後,只願 Apple 的評審大大能夠慧眼視英雄,讓我們的 App 上架,從此我們可在冰島躺著賺錢,看著天上的極光發呆。 彼得潘彷彿已經看到飛往冰島的機票微笑著跟我們招手,事不宜遲,接下來就讓我們一步一腳印,趕緊來將 App 送審上架吧 ! 付費帳號才能將 App 送審上架...
View Article記憶體管理:了解 Strong、Weak 和 Unowned Reference 輕鬆解決記憶體洩漏
當我們在編寫程式時,你可能會發現有些變數的 Reference 是 strong、weak 或 unowned,它們代表甚麼意思呢?把所有變數宣告 Strong Reference 是否就會讓變數更強呢? Strong、weak 與 unowned 的使用,其實與 Swift 記憶體管理的 Automatic Reference Counting (自動參考計數機制,...
View ArticleBest Practice:助你在 Swift 中更效地使用類別
在本篇教學中,我將會介紹一些最佳實踐 (best practice),助你在 Swift 中安全而有效率地使用類別(參考型別)和參考語意 (reference semantics)。雖然協定導向程式設計 (POP) 及數值語義現在十分流行,但是追隨新技術的同時,不代表你需要拋棄所有關於類別的設計方法。你也可以在類別中加入一些簡單的結構,像是複製建構器 (copy...
View ArticleFlutter 教學:從零開始 一步一步學會使用跨平台套件 Flutter
此篇文章旨在分享我的歷程、並啟發其他科技公司選擇使用 Flutter。 開始的契機 這一切源自於一位過去與我工作過的專案主管 Peri。當時,他問我是否有可能在四個月內為 EntrenaPro 的 iOS 和 Android App 重做雛形。他分享了專案的 invision 連結給我。而且他對我們使用哪種跨平台套件持開放態度,只要可以幫助我們快速完成就可以。EntrenaPro 這個 App...
View ArticleParallel Programming (平行程式設計) 可能會帶來甚麼問題?
簡介 在之前的幾篇文章中,我們已經探討了幾種不同控制並行 (concurrency) 的方法。作業系統也提供了一些的低階方式,舉例來說,Apple 提供了相關的框架、或是其他像是經常在 JavaScript 中被使用的 Promises 概念。儘管有些陷阱我在之前的文章中已經提過,但我意識到我說得不夠詳細,因此,為了讓你們更充分理解這些概念,本篇文章中的某些部份會重複涵蓋到之前的內容。...
View Article了解 Delegation Pattern 讓你更有效率地實作類別之間的溝通!
什麼是協定 (Protocol)? 根據 Apple 官方文件說明: 協定用於定義統一方法、屬性、和其他要求,以實作特定任務或功能。類別、結構、和列舉都可以遵循協定,並供具體實作來滿足協定定義的要求。任何滿足協定要求的型別,就可以說是遵循該協定。 遵循協定的型別除了必須實作的要求外,你還可以擴展協定來實作部分要求或附加功能,供符合的型別使用。 其實你在 Swift...
View Article深入了解 Swift String 字串型別 讓你的程式跑得更快更好
字串型別 String 是每一個程式語言都會有的基本型別,也是所有工程師在牙牙學語的階段中,第一個會接觸到的資料型別(應該沒有人印 hello world 不是印字串、而是在螢幕印點陣的吧?)。雖然 String 在程式語言中非常基本,在大多數的情況下使用也不算太難,但是 String...
View ArticleUI Transition 教學:一起來學習 Whatsapp 也在用的 UI 轉場技巧吧!
這是 WhatsApp 從 UITabBar 轉換到 UIToolBar 的過程: 本教學的實作結果: 自從我開始開發 iOS apps 後,我就一直關注那些非常成功的 App 如何實作 UI 轉場 (UI transition) ,希望可以跟著實作在我的 App 內。 最近我正在做一個 App,它的 UICollectionView 嵌入在 UIViewController 內,而...
View Article用 Framework 重構 Swift 程式碼 大大提高編譯效率!
在開發的時候,我們有時會需要在不同的 target 裡重複使用同一段程式碼。甚麼是 target 呢?在 Xcode 裡,target 包含了應用程式、擴充套件、測試套件、以及 framework 與 library 等幾種套件 (bundle)。一個 target 沒有辦法直接使用另一個 target 的程式碼,即使這兩個 target 都是屬於同一個應用程式。比如說,如果我現在有兩個...
View Article善用 Xcode Target 來管理專案 為你節省大量時間!
在本次的教學中,我將展示如何利用 Xcode Target 控制建構 iOS App(以及 macOS、watchOS 和 tvOS)過程中的複雜性。如果開發者知道並非所有事情都要靠程式碼(如 Swift)來完成的話,就可以節省大量時間。像 Xcode 這樣的整合式開發環境 (IDEs) 提供了許多強大的工具,其中一個就是...
View ArticleUIAlertController 教學:讓你輕鬆在 UIViewController 以外的地方呈現警告
從 iOS 8.0 開始加入的 UIAlertController,大概是大多數人在想要呈現 (present) 警告或者選單時的第一選擇。它的 API 非常的簡單,使用起來就像這樣: [crayon-5c20db86a28ff779916733/] 我們可以發現,它其實就是一個普通的 UIViewController 子類型,需要用另一個 view controller...
View ArticleZEPETO 深入剖析 讓你了解 3D 角色與使用者的互動關係
在虛擬世界,無論是在網路、社群媒體,或是遊戲中,使用者往往需要一個虛擬的 3D 角色代替自己與內容、他者或是虛擬物件做互動,去感知和遊歷虛擬世界。 在遊戲研究裡,3D 角色更是代替了真實的自己,暢遊於遊戲文本當中,而這樣的一個角色,稱之為虛擬化身...
View ArticleSwift 程式碼教學:好好設定物件 讓程式碼更簡潔清晰
我們都看過這樣的 code: [crayon-5c2e2f5e08ff9226347146/] 簡單、明瞭,但當中卻有些問題,讓這段 code 不是那麼的好看。 甚麼問題呢? textField 這個詞重複出現了五次。 整段程式碼沒有階層,只能靠 comment 與空行去跟其它的程式碼做區隔。 這整段程式碼做的其實是語意上相關聯的一組事件。如果我們用白話來解釋的話,就是: 我要在我的 view...
View ArticleSwift Class vs Struct:設計 Model 時,該用 Struct 還是 Class 呢?
用 Swift 寫 app 的時候,我們通常會在一開始就碰到一個問題:我們的 App model 應該宣告成 struct 還是 class 好? 比如說,假設我們在開發一個通訊錄 app,而我們確定要建立一個叫做 Contact 的型別來代表每筆通訊資料,且它需要有 var name: String 跟 var phoneNumber: String 兩項屬性。問題來了:不管是 struct 還是...
View ArticleiOS 12 期待已久的功能:客製化通知分組 (Custom Notification Groups)
在最近一次的 WWDC 發佈會,Apple 發表了 iOS 12 的新功能,其中一個就是通知分組功能。 今天,讓我們做一個導覽說明,去了解如何擁有屬於自己的客製通知分組,這非常容易上手,尤其如果你有一個像是聊天 App 或社群軟體 App,但首先要確定: 本篇教學是由 Xcode 10 Beta 第六版完成,所以官方版本釋出後,功能上或許會有一些改變。 通知分組 為你的 App...
View ArticleFirst Responder 教程:如何使用函式快速取得第一響應者?
在寫 iOS app 的時候,我們偶爾會碰到需要用到第一響應者 (First Responder) 的狀況。比如說,當我們想要把內容貼到它上面,或者要它執行復原、重做等動作的時候。然而,Apple 官方並沒有公開可以直接取得第一響應者的 API,只提供了 isFirstResponder 這樣一個屬性讓我們去檢查某個響應者是不是第一而已。那麼,如果我們不知道誰會是第一響應者的話 ── 比方說在...
View Article