🐤
【swiftメモ】MVCパターンのmodelについて
MVCパターンとは 〜model〜
ViewController,XIB,Modelを組み合わせて使用するアプリケーションアーキテクチャのことを言いう。
目的は、三つのコンポーネントに分割することで、コードの再利用性と保守性を向上させるために使われるはず
model(モデル)
model(モデル)の担当分野は
・アプリケーションのビジネスロジックを担当
・データの状態の管理とデータ操作に関するロジックをカプセル化
・データベース、API、ローカルファイルシステムからデータを取得、そのデータを加工してコントローラーに提供する。
データの状態の管理とデータ操作に関するロジックをカプセル化に分類される
//ユーザー情報を表すモデルの例
struct User {
var id: Int
ver name: String
var email: String
}
・データベース、API、ローカルファイルシステムからデータを取得、そのデータを加工してコントローラーに提供する。
//APIからユーザーデータを取得するための例
class UserService {
//ユーザーデータをフェッチするメソッド
func fetchUsers(completion: @escaping ([User]?) -> Void)
let url = URL(string: "https://hogehogegegegegeg")!
//URLセッションを使ってデータを非同期で取得
URLSession.shared.dataTask(with: url) {data, response, error in
guard let data = data, error == nil else {
print("Error fetching users:\(String(descridubg: error)"
competion(nil)
return
}
//ネットワークから取得したデータをUserの配列オブジェクトに変換しようとしている
do {
let users = try JSONDecoder().decode([User].self,from: data)
completion(user)
} catch {
print("エラー")
completion(nil)
}
}.resume()
}
ビューコントローラーから使用する例
class ViewController: UIViewController {
//[Users]の配列としてusersを定義している
var users: [User] = []
override func viewDidLoad() {
super.viewDidLoad()
// UserServiceのインスタンスを作成しuserServiceに代入している
let userService = UserService()
//userServiceのfetchUsersを実行している
//[weak self]を使用することでクロージャがselfを弱参照する
//※弱参照することで、ViewControllerインスタンスが不要になった時に適切にメモリから解放される
userService.fetchUsers {[weak self] fetchedUsers in
//クロージャの内容をメインスレッドで実行することを保証する
//※UIkitの更新はメインスレッドで行う必要があるため
DispatchQueue.main.async {
//fetchUsersに値が含まれている場合ViewControllerのuser配列に代入
if let fecheUsers = fetchUsers {
self?.users = fechedUsers
}
}
}
}
}
Discussion