[網路應用] Foundation— 透過 URL 取得圖片教學

資策會 APP Developer 行動開發工程師養成班

陳冠名|Michelle Chen Chen
Adream4ever
6 min readDec 26, 2021

--

▍URL

  1. 是 Swift 中用來指定資源的物件
  2. 資源可以是手機內的檔案、網路的文字或是圖片
  • 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 按鈕後,點擊右上方 Connect 按鈕存取網址圖片

確保網址無誤的兩個方式

因為 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 內原本就有預設的有底線 - 連接版本,如何做到新版本建立?請參考下圖

建立 Code Snippet
completion : docatch

Q:當撰寫好程式碼後,按下模擬器的 connect 卻無法顯示圖檔?

A:App Transport Security,Apple 在後期作法:對外連線非 https,都會被擋下來,預設 server 端須符合 TLS 規範且支援 1.2 版本以上!

Q:如何解決連線被阻擋的問題?若要連自己的 PHP,PHP 沒有憑證就沒有 https 的連線,網站沒有 TLS 機制該怎麼辦?

所有對外連線均略過檢查

A:於 Xcode info.plist 內設定所有對外連線均不檢查(如下圖),讓應用程式可以略過 Transport Security 檢查

新增 App Transport Security Settings / Allow ArbitraryLoads = Yes

Xcode info.plist 內的 XML 形式寫法,打開 source code

info > open as > 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>
網站允許 HTTP 載入

▍順利存取網路圖片!

--

--

陳冠名|Michelle Chen Chen
Adream4ever

Brave Together App 產品負責人,現職物聯網科技領域的 iOS Developer,歡迎交流~!