動態網頁與靜態網頁的差別,無非就是有數據庫的支援。
採用動態網頁技術的網站可以實現更多的功能,如用戶註冊、用戶登錄、在線調查、用戶管理、訂單管理等等。
動態網頁以數據庫技術為基礎,可以大大降低網站維護的工作量。
這次我們透過資料庫,接收到指定的路徑,顯示指定的照片。
下面的json是透過Get取得的資料。
{
"id": 141,
"title": "Aasassa",
"status": false,
"create_user": "test",
"update_user": "test",
"description": "Xfgvtybbyvybtvyvyvybyvybybtvtvtvtvyvtvtvtvtvtvtbybybybybyhtbtbyvububybhyjwt yu agh ssh wnteneeth w tenet eye with stuntwoman hey hey ppppp",
"tag": "green",
"image": "images/task/2020-09-18 17:32:45 task141.jpeg",
"card_id": 112,
"created_at": "2020-09-18T01:41:31.000000Z",
"updated_at": "2020-09-18T09:32:45.000000Z"
}
仔細看看,image 的 dictionary,裡面有一段路徑,我們可以透過這段路徑組裝URL。
URL = root domain + image 路徑
每個後端開的Api與生成URL的方法不一定相同,方法應看API文件,或是與後端工程師討論。
switch type {
case .gill:
urlStr = "http://35.185.131.56:8002/" + imageURL
case .other:
urlStr = imageURL
}
enum ImageURLType{
case gill,other
}
製作一組switch與enum,讓生成image時,可以選擇要用特定的URL或是使用指定的路徑。
let url = URL(string: urlStr)!
將URL字串轉成URL。
let data = try! Data(contentsOf: url)
let image = UIImage(data: data)
嘗試轉型data,然後轉成Image?
會crash,因此要做錯誤處理。
do
{
let data = try Data(contentsOf: url)
let image = UIImage(data: data)
completion(image)
}catch
{
print("image is error")
}
包成funtion,可以方便在任何地方都可以復用,配合 escaping closure,讓圖片可以傳出去。
func getImage(type:ImageURLType,imageURL:String,completion:@escaping(UIImage?)->Void){
var urlStr:String
switch type {
case .gill:
urlStr = "http://35.185.131.56:8002/" + imageURL
case .other:
urlStr = imageURL
}
let url = URL(string: urlStr)!
let data = try! Data(contentsOf: url)
let image = UIImage(data: data)
completion(image)
}
enum ImageURLType{
case gill,other
}