Array 宣告 // var VARIABLE_NAME: [TYPE] = ..... var fruits: [String] = ["apple", "banana"] var nums: [Int] = [1, 2] // 或是讓 Swift 自行判斷類型: var fruits = ["apple", "banana"] var nums = [1, 2] // 初始化: var cars = [String]() ps. Beta 版時的寫法是 var fruits: String[]
現在已經變成了 var fruits: [String]
操作 // 判斷該陣列是否有值,回傳 true 或 false fruits.isEmpty // 增加元素 fruits.append("watermelon") fruits += ["lemon"] // 取值 fruits[0] fruits[0...2] // 刪除值 - 將 apple 移除,banana 會自動補上 fruits.
使用技術與工具介紹及原因 終於要開始進入正題了!
在了解 REST/RESTful 後,
就要從無到有 - 從 Server 到 API endpoint 都由自己打造
今天會先來說明接下來會使用到哪些工具及技術
由於筆者使用 Mac ,因此若是有其他平台的使用者可能需要自行找教學
Server - Ubuntu with Vagrant + VitrualBox 接下來幾天會先從這個部分開始提起
我們會使用 VirtualBox + Vagrant 的方式來建立自己的虛擬環境
避免一些讀者可能對 Server command line 不熟
這個部分是大家可以跳過的部分,但是我還是會從無到有架起來
Backend Language - Node.js 後端語言使用了 Node.js,其實本來有考慮使用 Golang,
但顧及自己的時間… 還是使用 Node.js,方便快速
這幾年是 Javascript 的時代,
優勝美地似乎也可以支援使用 Javascript 撰寫 Automation Tool
從前端打到後端甚至到 DB 都可以使用到 Javascript ,
是該來看看 Javascript 的語法特性了 :D
而且 Node.js Event-driven 的特性,可以利用少少的資源提供高效能的服務
同時搭配易用性及社群活躍度,這是我選擇 Node.js 而非選擇 Golang 的原因
Playground - Optional, ! and ? 今天要來探討 Optional 型別,我認為這塊是初學 Swift 常遇到的問題
大家搞不懂 “!” “?” 到底在幹什麼,所以今天就來了解一下
在 Swift 中,所有的資料型別都不能賦予 nil
也就是以下這件事是不成立的:
var x: String = "test" x = nil 所以在 Swift 底下,就要使用 Optional 來處理值可能不存在的情況
當一個變數 x 被宣告成 Optional 型別時,該變數就會有兩個情況:
1. 有值,等於 x 2. 沒有值 要宣告一個變數可能為 nil 時的方式是使用問號 ‘?‘:
// 此時 x = "yaya" var x: String? = "yaya" // 此時 x 沒有值 x = nil 拿以下程式在 Playground 執行看看:
使用時機與實際 API 參考 什麼時候需要打造 RESTful API?
看看別人的 RESTful API (Instagram/Twitter)
什麼時候需要打造 RESTful API?
我認為當有數組資源要被多種不同平台使用時,就需要打造 RESTful API
例如,有 Android/ iOS / Web 要對同一 table 做存取時,
假設有個 MySQL DB,各個平台都使用各自的 mysql-driver 來直接操作 DB
假設有個 A 專案建立了一套書籍管理系統,資料庫裡記錄了大大小小的書籍,
而有個新的 B 專案需要使用到書籍的資料,此時 DB 操作的程式碼只能再寫一遍,
且各個平台重新撰寫,似乎是不大靠譜。
撰寫 RESTful API 的好處之一即是 RESTful 使用 HTTP 協定,
各個平台皆支援,不需要太複雜的程式,只需要使用各個平台的 http-client,
各個平台也不需要了解 DB 操作語法,只需要知道 json, xml 習慣的資料格式,
且開發 API 還能夠對各個資源輕易地上 cache 增進反應速度,
開發 RESTful API 好處多多,哪天想 Open API 也就不需要再多作處理了~
接著讓我們來看看兩個有名網站的 API 吧!
變數與常數 定義一個變數:
var obj: String = "" var 是保留字,宣告 obj 是一個變數名稱,冒號後面接資料形態
以此例子來說,宣告了一個字串變數叫做 obj,並且初始化為 “” 空字串
let obj: String = "" let 同樣是用來宣告一個變數,但是宣告此變數後,該變數的值無法被改變,
無法被改變的數值其實正正的名字就叫做常數 以上面的例子來說, 若我們多做一件事:
let obj: String = "" obj = "test" 若我們試圖去更改 obj,讓 obj 從空字串變成 “test” 時,
Xcode 就會報錯,不能更改該值
再來是宣告的變型,其實宣告時不一定要給資料形態,
Swift 會自動從後面的值來判斷 x 可能是什麼資料形態,
只是由於筆者的習慣,會儘量在後面加上該變數的資料型別
var x = "test" 一行內宣告多值:
var x = 0.0, y = 0.0, z = 0.0 我們就可以在 Playground 裡面試著宣告一些變數看看,並且使用昨天的輸出函式來輸出變數:
Representational State Transfer,簡稱 REST,
它是一種網路架構風格,他並不是一種標準。
而 RESTful 可以這樣子想像:
美麗 (Beauty) 的事物可以稱為 Beautiful
設計為 REST 的系統就可以稱為 RESTful
以 API 而言,假設我們正在撰寫一組待辦事項的 API,
可能會有以下方式來作為 API 的 interface:
獲取使用者資料 /getAllUsers 獲取使用者資料 /getUser/1 新增使用者資料 /createUser 更新使用者資料 /updateUser/1 刪除使用者資料 /deleteUser/1 若是以 REST 風格來開發 RESTful API 的話:
獲取使用者資料 /GET /users 獲取使用者資料 /GET /user/1 新增使用者資料 /POST /user 更新使用者資料 /PUT /user/1 刪除使用者資料 /DELETE /user/1 兩者差異是在於 RESTful API 充分地使用了 HTTP protocol (GET/POST/PUT/DELETE),
達到
1. 以直觀簡潔的資源 URI
2. 並且善用 HTTP Verb
承上篇,
RESTful 的優點如下所列:
1. 瀏覽器即可以作為 client 端 2. 可以更高效地利用 cache 來達到更快的回應速度 3. 界面與資料分離 4. 節省伺服器的計算資源 5. 可重用! web/android/ios 都可以用, 無痛轉換! RESTful 的要求:
1. client - server 架構 2. 分層系統 3. 利用快取機制增加效能 server-side: 在 GET 資源時,若該資源並沒有被變更,就可以利用 cache 機制減少 query,並且加快回應速度 client-side: 透過 client 端 cache 記錄 cache 版本, 若向 server 要求資源時發現 server 最新版與 cache 相同, 則 client 端直接取用本地資源即可,不需要再做一次查詢 省機器運算及流量 = 省錢 4. 通訊協定具有無狀態性 不能讓兩隻 API 做同一個動作! 假設完成轉賬手續必須先 call A 再 call B 的話, 若做完 A 後斷線導致 B 無法執行,後續要處理 A -> B 的方式會很麻煩 且不應該假設伺服器知道目前的狀態!
Swift 是 2014 年由蘋果公司在其開發者大會 WWDC 上所發佈的程式語言
The Swift Programming Language 一書中提到:
Swift 用來撰寫 iOS 及 Mac OSX 的程式。
Swift 吸收了 C 和 Objective-C 的優點,使其在設計更具彈性、容易,且撰寫時有更多樂趣。
Swift 是基於成熟而且倍受喜愛的 Cocoa 和 Cocoa Touch framework,意即 Swift 可以直接使用這些現有的框架
Swift 兼具編譯語言的性能,以及直譯式語言的特性。
** 什麼是 Cocoa/Cocoa Touch framework:
Cocoa framework 是 Apple 爲 Mac OSX 所建立的環境,用來開發 OSX 的程式,
而 Cocoa Touch framework 則是建立於 Cocoa framework 之上,用來開發 iOS 作業系統程式,
此兩種 framework 皆遵循 MVC 軟體架構,開發時必須遵循此架構。
首先,你必須要有一台 Mac。
我也不知道要如何用虛擬機 build 一台 Mac VM 出來,
所以就是,先買一台 Mac XD
若已經有了 Mac,只要到 Appstore 下載 Xcode 即可,
注意是要 Xcode 6.0 以上, Xcode 6 才有支援 Swift ,舊版的 Xcode 5 是無法開發 Swift 的
安裝完 Xcode 後
首先開啓 Xcode
選擇 “Create a playground”
輸入 Playground 名稱並選擇儲存位置
就進入了 Playground 了!
可以看到 Xcode 已經預先載入了幾行程式碼了 來稍微看一下:
// Playground - noun: a place where people can play import UIKit var str = "Hello, playground" 第一行,使用了 //,有寫過程式的話一定都知道這是註解
I use Ubuntu 14.04, Nginx 1.4.6, php5-fpm, Codeigniter 2.2.0
It will remove index.php, and access Codeigniter site normally.
Clean configuration “/etc/nginx/site-enabled/default”:
server { #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> START listen 80; listen [::]:80 default_server ipv6only=on; root /YOUR/PROJECT/ROOT; index index.html index.htm index.php; # Make site accessible from http://localhost/ server_name localhost; #location ~* .(ico|css|js|gif|jpe?g|png)(?[0-9]+)?$ { # expires max; # log_not_found off; #} location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404.