[網路應用] Foundation— 透過 URL 取得圖片教學
資策會 APP Developer 行動開發工程師養成班
▍URL
- 是 Swift 中用來指定資源的物件
- 資源可以是手機內的檔案、網路的文字或是圖片
- URL(String)
- 本機資料:Local 檔案(fIle)
- 遠端資料:File transfer protocol(FTP)
- http:// or https://
3. 取得網路文字內容: String(contentsOf: , encoding:)
4.取得任何內容: Data(contentsOf:) , 舉例:圖片檔案下載
- String & Data 是不同的 Init 方法
▍Apple 官方 init(contentsOf:) 教學
▍如何透過 URL 連線機制,順利存取網路圖片?
▍確保網址無誤的兩個方式
因為 URL(string) 是 optional,key 進去的格式不能有錯,若 http 網址中出現中文字,會沒有辦法產生物件,imageURL
會是空值。
解法ㄧ:用 let 撰寫,於 imageURL 的程式碼後方加上!
let imageURL = URL(string:"http://graph.facebook.com/AppStore/picture?type=large")!
解法二:用 if let 改寫
if let imageURL = URL(string:"http://graph.facebook.com/AppStore/picture?type=large")
Q:當輸入 Data(contentsOf:) 的程式碼, Xcode 出現黃色警告訊息 throw 的時候,該怎麼辦?
A:throw 是 Swift 的流程控制轉移語句,假使我們已經預設會有幾個 Error Situation 發生,我們可以在控制流程中加入 throw 來拋出錯誤,進而處理這些錯誤。
A:do-try-catch 是 Error Handling 最完整的寫法。
在使用 do try catch 時,我們必須將呼叫可能會拋出錯誤的方法及之後要做的事情包在 do{} 裡面,並在呼叫該方法前擺上 try 關鍵字,其後將錯誤出現時要做的事情放在 catch{}裡。
在 do-try-catch中擁有 catch 的功能,所以可以理所當然的接到一個 error 。
do-try-catch 的輸入格式如下:
do {//執行大括弧內的程式碼
try //try後面輸入想要執行錯誤處理的程式碼
//這邊可以執行其他程式碼,例如 print()} catch //這邊輸入一開始定義的錯誤{//這邊輸入當捕捉到錯誤之後要執行什麼事情}
▍Xcode Code Snippet
每次都要打同樣的程式碼,其實蠻容易出錯&花時間,這時候就可以用 Xcode 超貼心的 Snippet 功能!還可以自己創立習慣的版本當作範本!
以 do catch statement 為例,Xcode 內原本就有預設的有底線 - 連接版本,如何做到新版本建立?請參考下圖
Q:當撰寫好程式碼後,按下模擬器的 connect 卻無法顯示圖檔?
A:App Transport Security,Apple 在後期作法:對外連線非 https,都會被擋下來,預設 server 端須符合 TLS 規範且支援 1.2 版本以上!
Q:如何解決連線被阻擋的問題?若要連自己的 PHP,PHP 沒有憑證就沒有 https 的連線,網站沒有 TLS 機制該怎麼辦?
所有對外連線均略過檢查
A:於 Xcode info.plist 內設定所有對外連線均不檢查(如下圖),讓應用程式可以略過 Transport Security 檢查
Xcode info.plist 內的 XML 形式寫法,打開 source code
針對某幾個網站做例外設定
將此段落程式碼,貼至 info.plist 內,記得替換 aaa.bbb.com 網域
<key>NSAPPTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>aaa.bbb.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>