1
/
5

SwiftDataとは?【株式会社ライトコード】

SwiftData とは?

SwiftDataは、データモデリングと管理のためのフレームワークです。Swiftの新しいマクロシステムを活用し、シームレスなAPI体験を提供します。また、SwiftUIと統合され、ウィジェットなどの他のプラットフォーム機能と連携して動作します。

SwiftDataの主要機能

@Modelマクロ

SwiftDataの中心的な機能の一つが、@Modelマクロです。このマクロを使用することで、Swiftコードから直接モデルのスキーマを定義できます。SwiftDataのスキーマは通常のSwiftコードですが、必要に応じてプロパティに追加のメタデータを注釈することもできます。これにより、強力な機能がモデルオブジェクトに追加されます。クラスに@Modelを付与するだけで、スキーマが生成されます。

import SwiftData


@Model
class Trip {
var name: String
var destination: String
var endDate: Date
var startDate: Date

var bucketList: [BucketListItem]? = []
var livingAccommodation: LivingAccommodation?
}

プロパティの管理

SwiftDataは、プロパティにメタデータを追加することで、ユニーク制約や削除ルールなどを指定できます。

@Model

class Trip {
// ユニーク制約のあり
@Attribute(.unique) var name: String
var destination: String
var endDate: Date
var startDate: Date

// 削除時にカスケード削除される
@Relationship(.cascade) var bucketList: [BucketListItem]? = []
var livingAccommodation: LivingAccommodation?
}

データの取得と操作

SwiftDataを使用してデータを取得し、変更するための主要なオブジェクトは、ModelContainerとModelContextです。

// スキーマのみで初期化

let container = try ModelContainer([Trip.self, LivingAccommodation.self])

カスタマイズしたい場合は、configurationsで指定します。

// カスタマイズ設定で初期化

let container = try ModelContainer(
for: [Trip.self, LivingAccommodation.self],
configurations: ModelConfiguration(url: URL("path")) // カスタムURLで初期化
)

SwiftUIとの統合

SwiftDataはSwiftUIと共に使用することを念頭に設計されており、これらのフレームワークを一緒に使用することが推奨されている。.modelContainerで指定することにより、自動的にModelとの関係を確立されます。設定によりトラッキングや値の取得・保存・更新が可能になります。

import SwiftUI


@main
struct TripsApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(
for: [Trip.self, LivingAccommodation.self] // モデルコンテナを設定
)
}
}

SwiftUIのビュー内でModelContextにアクセスします。

import SwiftUI


struct ContextView: View {
// モデルコンテキストを@Environmentで取得
@Environment(\.modelContext) private var context
}

データの取得とクエリ

SwiftDataでは、PredicateとFetchDescriptorを使用してデータを取得できます。

let today = Date()

// Predicateで条件を指定
let tripPredicate = #Predicate {
$0.destination == "New York" && // 目的地がニューヨーク
$0.name.contains("birthday") && // 名前に「birthday」を含む
$0.startDate > today // 開始日が今日以降
}

let descriptor = FetchDescriptor(predicate: tripPredicate)
// フェッチの実行
let trips = try context.fetch(descriptor)

SortDescriptorを使用してデータをソートして取得することもできます。

記事の続きは下のURLをクリック!

https://rightcode.co.jp/blogs/47399



エンジニア積極採用中です!

現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!

採用ページはこちら:https://rightcode.co.jp/recruit

社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life

社長と一杯飲みながらお話しませんか?(転職者向け)

特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!

ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

  • ライトコードの魅力を知っていただきたい!
  • 社風や文化なども知っていただきたい!
  • 技術に対して熱意のある方に入社していただきたい!

一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。

【コーポレートサイト】https://rightcode.co.jp/

【採用募集】https://rightcode.co.jp/recruit(こちらからの応募がスムーズ)

【wantedlyぺージ】https://www.wantedly.com/companies/rightcode

Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?
株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Like Hiroyuki Choshi's Story
Let Hiroyuki Choshi's company know you're interested in their content