#4 期末電影App
Published in
5 min readDec 27, 2022
畫面截圖
demo:https://youtu.be/wrBZtOfsQig
github:https://github.com/0xani1818/hw4_test
功能需求
- 以 TabView & NavigationView 製作多頁面 App。
- 串接後台的 API 抓取 JSON 資料後以 List 顯示,點選 row 可到下一頁顯示 detail,至少使用到兩個 API。
let urlStr = "https://api.themoviedb.org/3/movie/upcoming?api_key=fdcacafe0617aa0576fb8b9c2b754642&language=zh-TW&page=1®ion=tw"
if let url = URL(string: urlStr){
URLSession.shared.dataTask(with: url){ (data, response, error) in
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
if let data = data,
let MovieResults = try? decoder.decode(MovieResult.self, from: data) {
movies = MovieResults.results
}
//抓取即將上映
let urlStr = "https://api.themoviedb.org/3/movie/popular?api_key=fdcacafe0617aa0576fb8b9c2b754642&language=zh-TW&page=1"
if let url = URL(string: urlStr){
URLSession.shared.dataTask(with: url){ (data, response, error) in
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
if let data = data,
let MovieResults = try? decoder.decode(MovieResult.self, from: data) {
movies = MovieResults.results
}
//抓取熱門電影
- 定義遵從 ObservableObject 的 class 串接網路 API 抓資料,利用 Published property 觸發畫面更新,使用到 EnvironmentObject。
class Login:ObservableObject {
@Published var token :String = ""
@Published var login :String = ""
}
struct FbLogin: View {
@State var username = ""
@State var email = ""
@EnvironmentObject var loginData:Login
- 資料抓取失敗,比方沒有網路時,顯示 alert。
- 使用 SPM 加入第三方套件。(不包含上課範例提到的 Kingfisher)
- 使用 FavQs API 開發註冊登入功能。
- 實現分享功能。
iOS 16 使用 ShareLink,舊版使用 UIViewControllerRepresentable 加入 UIActivityViewController。
- FB 登入。
- 加入 search 功能。
心得:經過一學期更加認識swiftUI,但也覺得自己不足的地方還有很多,雖然常起不來缺課但Peter的文章都寫得很仔細,私底下問問題也是有耐心的回答。期末比較忙碌,因此app十分陽春也沒有額外做其他加分功能,非常感謝Peter這學期的指導。