吳良斌 Eric Wu

0930310419
[email protected]

感謝 能 學習 iOS App (Swift) 開發技術 !
希望能有機會從事相關 程式設計 工作 !

我 個性 沈穩 , 喜歡接受挑戰, 自學並發揮創意 協助他人, 且 勇於突破與 創新 !
我覺得 , 寫程式是一種 創作, 是一種能力 , 是一種 投入, 與 逐漸喜歡 的 過程 與 熱誠!
多年的 資訊工作經驗 , 我 不停 的 思索我 人格特質 與 興趣 , 決定 參加 
彼得潘 iOS App 程式設計 課程 !
感謝 Peter 充實教材 與 技術指導 ! 謝謝 !
我的理想工作是 iOS App developer !
並能 在寫程式的道路上 , 不斷的學習, 不斷 的創新 !

下表為我所整理與學習的 2020.7 月~ 9月 參加 彼得潘 iOS App (iOS14 ,  XCode12)程式設計,  Swift 技術大綱 與 技能說明 , 
課程結束後, 我不斷複習熟記 !深怕有所不足 ! 
因而自行整理 並 已確認以下所有 教授技能 的應用重點 ! 
請能參考與了解 謝謝 !


                 技術大綱                                                       技能說明

XCode and Storyboard Introduction

1.  Xcode instructions and  Attributes Inspector
2. Objects Library and UI Design Tint Color and AccentColor
3. subview and superview
4. install custom font
5. design App Icon
6. warning and error messages.
7. Assets.xcassets
8. Image view + label + buttons (cmd+K)
9. Prototyping with marvel App
10.Sketch and Figma
11. show Segue
12. navigation controller and tab bar controller
13. scroll view and user defined runtime attributes
14. navigation item and bar button item
15. point & pixel
16. UIImage rendering mode
17. iOS Simulator with Dark mode (system color)

UIViewController , UITableViewController,
Navigation Controller,
Tab Bar Controller

1. Section and Static cell with UITableViewController
(not table view with view controller)
2. selection show segue
3. Cell Style
4. Header and Footer with View
5. View Controller Embed in Container View by using UITableViewController for different designs and segment controller with different container view
6. Highlighted in image view and label
7. Accessory
8. cell view with selectedBackgroundView
9. light mode and dark mode (Feature -> Toggle Appearance) for different system colors
10. LaunchScreen.storyboard to Main.storyboard
11. UITableView cell with scroll view
12. Sketch and Zeplin for UI design

Swift Programming in Playground

1. Variable (var) and (let) Constant
2. Autocompletion
3. Compound assignment operator
4. Type Inference and annotation
(option + click for Declaration information)
5. Function and Property
6. iOS SDK (Software Development Kit) and import framework
    API (Application Programming Interface)
7. UIBezierPath
8. Function and Class
9. parameter name and argument label using in function
10. class and object
11. property and method
12. class inherit

outlet and action

1. MVC (Model data , View , Controller)
2. UIViewController
3. ViewController.swift
4. @IBOutlet and @IBAction
? optional type for nil and ! unwrapped Optionals
5. property (V) and method (M)
6. breakpoint
7. string interpolation "\()"
8. connection inspector
9. command with rename
10. press button action = touch up inside

viewDidLoad , array & 
custom controller class,
Directory

1. viewDidLoad in UIViewController
2. override func and super.viewDidLoad()
3. array with different types
4. change class in Identity Inspector
add new swift file from Cocoa Touch class framework
5. Key and Value in Directory

if else , optional , random variable , static function,
switch, Generic type

1. comparison operator
2. && , ||, ==
3. optional and optional binding (if let), multiple optional binding
4. Implicitly Unwrapped Optionals
5. view.endEditing and resignFirstResponder
6. Half-Open (..<)and Closed (...) Range Operator
7. static type method and static property in class
8. switch and multiple if-else
9. optional chaining (?.) , force-unwary (!) , optional binding (if let)
    Nil-Coalescing operator (??)

class initializer and struct

1. Module (class and struct definition for data) in MVC
2. multiple class initializer for variables
3. super.init (inherit super class condition)
4. Generate Memberwise Initializer (command + class name)
5. struct with Memberwise Initailizer (no default initializer)
6. swift value type for struct and reference type for class
7. array[struct]()

random function and for in loop 

1. for in & where using in array
2. conditional loop (while)
3. enumerated in array using for in loop
4. shuffled() and .suffle() using in array
5. outlet collection (outlet array usage)
6. array.randomElement()

Passing data between View controllers and controllers in iOS SDK

1. IBSegueAction (drag segue from show segue to source controller)
transfer data by using struct definition with IBSegueAction between different controllers
2. WebKit View
3. shouldPerformSegue
4. segue with Argument = Sender and Identifier
for sender and segueIdentifier
5. present modally
6. present controllers in various iOS SDK (UIAlertController...etc)

enum

1. enumeration case for typing safety
2. struct and enum
3. enum and switch
4. enum.rawValue
5. CaseIterable (enum adopt this protocol) &
allCases.randomElement() property (enum array)

Auto Layout

1.  constraints (Spacing to nearest neighbor)
2. Intrinsic Content Size
3. Clear selected constraints and All Views constraints
4. Alignment
5. Leading and Trailing
6. Equal Widths & Heights
7. Portrait & Landscape
8. Margin
9. Update Frames
10. Ambiguous and Unsatisfiable Layouts
11. Add Missing Constraints
12. Conflicting Constraints
13. Aspect Radio & multiplier
14. SubView and SuperView constraints
15. Content Hugging Priority
16. Content Compression Resistance

Stack View

1.  multiple UI embed in stack view
2. stack view with constraints
3. Horizontal and Vertical auto layouts
4. content hugging priority and Content compression priority
5. nested stack view
6. Distribution
7. Unembed stack view
8. Content Layout Guide and Frame Layout Guide (scroll view with auto layout)

Protocol , Delegate, 
Data Source and Dictionary
(Array with Dictionary)
(Array with Struct)

1.  define and adopt the protocol and implement function
(class , struct and enum) , one class can adopt several different protocols and carry out all functions
2. define protocol as type for variables using in class
3. Type casting as! (transfer type by using as!)  and Safe Type casting by using as?
4. Assign the delegate (controller.delegate = self)
5. implement the function codes defined by the protocol
optional functions in protocol may not be implemented by conditions.
6. table view controller with default delegate and data source
7. override func
8. IndexPath for sections and cells
9. iOS SDK with delegate
10 . var array object by using array with dictionary and array with struct (preferred the later one!)
11. type casting (as?) from Any to UIImage for UIImageView
12. Privacy - Camera Usage Description
13. drag UI component (ex textView) and assign delegate from main storyboard
14. main.storyboard can't produce UIImageViewControl , so delegate can be assigned by code only.
15. PHPickerViewControllerDelegate (for multiple photo selections)

table, data source , extension

1.  UITableViewController (with default data source and delegate)
iOS SDK Delegare (protocol)
2. Dynamic Prototypes
3. adopt protocol UITableViewDataSource
4. cell Identifier
5. extension for class , struct , enum, protocol
extension for computed property not for stored property
6. custom outlet cell format (table.indexPathForSelectedRow?.row)
7. UITableViewCell
8. adopt UITableViewDataSource
9. iOS SDK data source
10. sender.convert (CGPoint) , indexPathForRow (at:point)
11. data update func defined in cell.swift
12. get data from Internet (try? Data(contentOf: url))
    URLSession.shared.dataTask with .resume

Thread , API , GCD, JSON, 
Protocol Codable, HTTP method & CRUD, 
Google SheetDB

1. main thread and background thread
2. request & response for API
3. URLSession.shared.dataTask with .resume()
4. Grand Central Dispatch (GCD)
5. DispatchQueue.main.async
6. JSONDecoder() & JSONEncoder() format and API URLs
7. adopt protocol codable for struct
8. do catch
9. tableView.reloadData()
10. API Key (request.setValue), NSURLRequest.CachePolicy(download data from Internet)
11. HTTP method (Get, Post, Put, Delete, Patch)
(upload data to Internet)
12. CRUD (Create , Read, Update, Delete)
13. url.addingPercentEncoding

Closure

1. -> function type
2. sport :() -> String
3. iOS SDK Closure function (present, timer, animation, URLSession)
4. sport:(String) -> String
5. anonymous functions (function is a special case of closure)
trailing closure (omit the last closure function)
6. $0 , $1
7. closure : forEach (swift Higher order function)
.forEach(print($0))
8. closure : map
.map{$0*2}
9. closure : filter
10. @escapong closure function for reuse outside the closure
11. Error Handling (do catch) (Error protocol) (enum case) (throw?)(guard else) (try , try?, try!)

unwind Segue, shouldPerformSegue,
notification
delegate

1. key words "unw" for unwind Segue to mark the return page
2. connect the return button to the exit view controller
3. return false from the shouldPerformSegue will refuse unwind Segue
4. unwind Segue will trigger the prepare function for transferring data between two controllers
5. RowAnimation
6. key word "commit" for cell delete function (from UITableViewDataSource protocol)
7. indexPathForSelectedRow

UserDefaults

1. user's defaults database (property list)
UserDefaults.standard.set , UserDefaults.standard.string(forKey)
2. propertyDecoder.decode (from Data) & propertyEncoder.decode (to Data) for custom data type
3. Document directory

Define custom Protocol,
No segue for transferring data between controllers,
xib (controller with xib)

1. Define the protocol and function
2. adopt the custom protocol to several controllers
3. implement the functions to the Controllers
4. transferring the data between controllers by 1,2,3 above
5. navigation controller for pop view controller
6. Storyboard ID for controller
7. pushViewController
8. present view controller and dismiss function
9. self.view.subviews[0] and view.viewWithTag
10. container view
11. isUserInteractionEnabled
12. AppDelegate.swift
13. design xib for UI component (recuse UI for controllers)
file -> new User Interface -> View (or empty)
Bundle.main.loadNibNamed("xibname",) array.first as? swift file class and change property ....view.addSubview(xib)
14. NSLayoutConstraint

performSegue , Generic Type and custom protocol with delegate for transferring data between controllers,
produce the controllers (with storyboardID) from swift codes and push to preferred controller

1. Define the different SegueID from controller to controller
2. performSegue with different SegueID from the codes (ex:@IBAction defined in button)
3. trigging the prepare function

compare performSegue vs shouldPerformSegue
4. Generic Type (T.Type) with where conditions
5. Generic function (ex : func decode<T> where T : Decodable type)
6. define protocol (with functions) and delegate (var as controller?)
adopt the custom protocol and carry out the functions
7. navigationController?.popViewController(controller ,animated:true) or present with controllers
8. subview[0] & superview for UIView
9. view.viewwithTag(100) for UI component
10. self.view.windows?.isUserInteractionEnabled

App lifecycle &
ARC (Automatic Reference Counting)

1. AppDelegate.swift (apply app theme) & UIApplicationDelegate
2. SceneDelegate & UISceneDelegate
rootViewController (defined the first open with userDefaults data)
3. Background Modes (sceneWillResignActive and sceneDidEnterbackground(_:))
var in AppDelegate for the usage in all classes
4. ARC is for class Object (reference type) not for struct (value type) and enum (Product -> profile)
Global variable (define var outside the class)
5. add weak for Strong Reference Cycle (capture list in closure)

computed property &
property observer

1.  var name : {get} and {set(newName)}
{get} can be omitted 
2. Calendar.current for computed property
3. willSet and didSet functions for property observer when property value change

Notification Center

1.  NotificationCenter.default.addObserver (self, #selector, name,object)
2. @objc function for NotificationCenter
3. UIControlEvents for NotificationCenter
4. addObserver -> post for previous pages not for next pages

timer ,animation &
gesture recognizer &
class permission (rights)

1.  loadView(), viewDidLoad(), viewWillAppear()
viewDidAppear(), viewWillDisappear(), viewDidDisappear()
2. Timer.scheduledTimer{}
3. UIViewPropertyAnimator.runningPropertyAnimator{closure}
4. swipe gesture recognizer
5. User Interaction enabled
6. @IBAction for gesture recognizer
7. class open right , public struct and enum rights , internal rights(Xcode default), file private rights (can be used in one class swift file for different class), private rights (can be used in one class swift file for one same class)

SPM(Swift Package Manager) 
CocoaPods (install third party packages)

1.  Swift packages (ex : Alamofire for SPM) installation
2. up to the major version
3. import the SPM to the codes
4. Introduction the SpmPackageIndex.com to find the SPM package
5. CocoaPods.org (pod install , pod update)

Core Data

1.  use Core data in new file project
2. .xcdatamodeled (Entity as database)
3. create Attribute and Type (as table in database)
4. NSPersistentContainer (in Appdelegate.swift to load Core Data entity)
5. NSPredicate()

我的 成果作品 說明如下  (請能參考 動態演示 圖檔的操作, 謝謝 !) :


我將持續的 學習 並 不斷創作 與 更新 !

初衷
Swift iOS App之自我介紹
Eric Wu (Stay hungry, stay foolish.) 
我一定可以
成為 
An accomplished iOS App developer !

水平捲動,上下捲動和分頁的 scroll view 實作


Click Here

UIBezierPath ,CAShapeLayer
實現圓環進度條


Click Here

 UIImageView , UIDatePicker, UISlider, UILabel , UISwitch實作 (10YearChallenge,時間都去哪了)


Click Here

換算App(BMI, TDEE,BMR),傳資料(@IBSegue Action 與 struct 定義與應用),Stack View with constraints,if let 抓資料, if else ,info 自我介紹頁面,利用 UIBezierPath, CAShapeLayer, Mask 做切圖

Click Here

瘋狂購物 App — UIStepper 與 Delegate 運用於 Text View
(不寄送海外地區)


Click Here

stack view + scroll view 與 delegate應用 — 分頁和圖片縮放   

(寧靜祈禱文)

Click Here

實作 Table View 的功能

(冥想 Meditation App 致虛極,守靜篤)


Click Here

實作 新增,讀取,刪除,修改 & 儲存資料的 App 且可上傳圖片,並設定必填欄位之 警告訊息

(My Notes)

Click Here

串接第三方 API,解析 JSON 資料,轉換成自訂型別 後取出資料 並 運算 成有用 資訊 之顯示

(Taiwan 天氣查詢)

Click Here

訂飲料 App 上傳資料到後台,可編輯刪除

(謝謝 Peter 請喝飲料 !)

Click Here

猜數字 和 1A2B App
(遊戲 App)
Click Here

計算機 App 

(惡搞 87 !)

Click Here

App 的解鎖畫面(passcode)

(密碼 顯示 前兩碼 )


Click Here

與 Peter 的合照留念 !
彼得潘iOS App 程式設計!感謝 Peter ! 
謝謝 !
(課程心得)

Click Here

期望大家,有為者亦若是 !
成為 傳說中的 “勇者 !”

自傳 :
      就業以來, 我都是一直從事資訊領域的相關工作, 從 網路工程師, HelpDesker , 系統分析 , 一直到 資訊部經理 , 管理企業內部資訊軟硬體整合規劃 , 期間, 我不停思索自己在資訊工作領域上的特質與熱誠,我 覺得 我 具備 自學 , 積極 , 能克服困難 , 努力成長 的人格特質, 這是 我能一路晉升 的關鍵 , 而, 對於  資訊工作 熱誠 是 , 我 能 自行充分利用 Open Source 等工具 , 例如 Drupal CMS (Open Source) , 以套用第三方 packages套件的方式 , 幫公司建置多套 流程改善系統, 獲致很大好評 , 這些工作成果, 逐漸激起我對於寫程式創作的興趣, 我很享受 工作上突破困難的成就感.
    Apple 公司的產品品質與定位 , 一直是我所嚮往與追求的 , 我超級嚮往能成為 iOS App Developer , 決心參加 彼得潘 iOS App 程式開發課程 , 在扎實且廣泛的訓練課程中 , 受益非淺 , 感謝 Peter 充實課程與技術指導,
課程結束後, 我不斷複習並吸收所有技能, 深怕有所不足,  我將所學的所有技術重點 與 課程作品集 , 整理成 本履歷表 的說明 ,我已完成能掌握所有技能 , 請 參閱主管能了解 !
期待能有面試的機會 !

謝謝 !
在 iOS App 開發的道路上 , 我將持續努力學習與成長!

個人基本資料 :

姓名 : 吳良斌      性別 : 男     目前待業中    手機 : 0930310419   email : [email protected]
英文姓名 : Eric. 出生 :1970.7.22.   地址 :新北市新莊區福壽街140號2樓 (02 89923663)
已婚, 有兩位 寶貝女兒 ! 身高 176 公分 體重 : 85 公斤
家庭生活美滿 !個性穩重 , 喜歡研究 資訊科技 與 閱讀 心靈成長書籍  , 聽音樂 !

資訊認證如下 :

PMP (國際專案管理師) , TOEIC 多益 680 分 , MCSE ,  MCSA ,  MCDBA

Work Experience

資訊部經理

Qmomo_愛桃子有限公司  •  February 2020 - May 2020

1. 帶領 資訊 Team 維護 全公司網路架構規劃與管理
2. 門市個據點 電腦 軟硬體環境運用規劃管理
3. 雲端主機 AWS 與 GSUIT 運用規劃與管理
4. 跨界電商平台 與 ERP 系統 整合架構管理
5. 預約系統 設計 建置
6. 熟悉 91APP及Shopline 電商平台的系統維護

資訊部 資深專員

莎美娜實業股份有限公司  •  March 2017 - February 2020

1.帶領 集團 MIS 日常工作管理 , 包含 大陸昆山廠 , 柬埔寨 廠 與 新店總公司
之Firewall ,VPN 網路 與 機房 軟硬體架構 與 管理維護 ,
確保所有 資訊系統 正常運作
2.日常備份,Snapshot 備援,資訊安全 (Anti-Virus 防毒軟體)管理,
包含 VSphere, Hyper-V, Virtual Box 的虛擬化 主機 管理 與 維護
3.負責集團軟體開發, 跨部門溝通協調、專案管理
並 根據 公司需求, 提出 資訊系統 解決方案
包含利用 Open Source ,
Drupal (CMS, Content management system) 為 Framework 框架
搭配 Ubuntu OS , HTML, CSS , PHP , JavaScript, jQuery ,
MySQL, Docker 虛擬容器等技術, 整合的開發設計 開發建置 多套系統 ,
應用於企業各部門,解決問題 並 提升工作效率 , 好評不斷 !
所建置的系統如下 :
A: 樣本進度追蹤系統,
B: 品質異常管理系統,
C: 樣本資料庫管理系統,
D: CSR 企業社會責任系統 (Energy, Water, Waste,HSE, HRM)
自動化資料蒐集 與 Dashboard 分析系統 ,
所有系統均成功上線, 正常運作,
本人可以 獨立 研發 並 提供各項問題的解決方案,
以最少的 資訊系統 運用成本, 最大化 企業各部門 的工作效率。

資訊部經理

夏姿服飾有限公司  •  October 2013 - February 2017

1. 領導團隊建構跨國性 Network Infrastructure, 包含 兩岸 VPN ,全公司資訊系統虛擬化 , 系統異地備份與備援建置 。
2. 重新評估規劃完整的 ERP 系統 , 管理整個軟體開發專案之流程(如:前置規劃、流程分析、解決方案評估、系統分析、系統設計、系統開發、資料驗證、系統測試、使用者測試)。
3.了解相關單位對於資訊化之需求,思考合適之解決方案,協助整體資訊之發展與應用。進行專案過程中必要之溝通協調工作。

Powered by CakeResumePowered by CakeResume