#4 期末電影App

Annie
海大 SwiftUI iOS / Flutter App 程式設計
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&region=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這學期的指導。

--

--