惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
博客园 - Franky
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
B
Blog RSS Feed
雷峰网
雷峰网
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
美团技术团队
云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
G
Google Developers Blog
T
Tailwind CSS Blog
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
月光博客
月光博客
Engineering at Meta
Engineering at Meta

博客园 - xgqfrms

xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs xgqfrms, cnblogs, blogs Remotion Video Maker All In One git worktree All In One Tesla 的车机使用什么技术来渲染汽车模型的? 宜家 VEVELSTAD 维维斯托床架 All In One macOS sysmond bug All In One Three.js All In One The COF of LCD Monitor All In One Dell 显示器 S2419HM 灰屏 &花屏 All In One AI Harness Engineering All In One 电脑外接显示器天梯榜 All In One
xgqfrms, cnblogs, blogs
xgqfrms · 2026-07-08 · via 博客园 - xgqfrms

SwiftData All In One

https://developer.apple.com/documentation/swiftdata

@Model 注解 修饰器


import SwiftUI
import SwiftData

@Model
class RemoteImage {
  var sourceURL: URL
  var data: Data
  
  init(sourceURL: URL, data: Data = Data()) {
    self.sourceURL = sourceURL
    self.data = data
  }
}

expand marco

image


import SwiftUI
import SwiftData

@Model
class RemoteImage {
  @_PersistedProperty
  var sourceURL: URL
  @_PersistedProperty
  var data: Data
  
  init(sourceURL: URL, data: Data = Data()) {
    self.sourceURL = sourceURL
    self.data = data
  }
  @Transient
  private var _$backingData: any SwiftData.BackingData<RemoteImage> = RemoteImage.createBackingData()

  public var persistentBackingData: any SwiftData.BackingData<RemoteImage> {
    get {
      return _$backingData
    }
    set {
      _$backingData = newValue
    }
  }

  static var schemaMetadata: [SwiftData.Schema.PropertyMetadata] {
    return [
      SwiftData.Schema.PropertyMetadata(name: "sourceURL", keypath: \RemoteImage.sourceURL, defaultValue: nil, metadata: nil),
      SwiftData.Schema.PropertyMetadata(name: "data", keypath: \RemoteImage.data, defaultValue: nil, metadata: nil)
    ]
  }

  required init(backingData: any SwiftData.BackingData<RemoteImage>) {
    _sourceURL = _SwiftDataNoType()
    _data = _SwiftDataNoType()
    self.persistentBackingData = backingData
  }

  @Transient private let _$observationRegistrar = Observation.ObservationRegistrar()

  internal nonisolated func access<_M>(
    keyPath: KeyPath<RemoteImage, _M>
  ) {
    _$observationRegistrar.access(self, keyPath: keyPath)
  }

  internal nonisolated func withMutation<_M, _MR>(
    keyPath: KeyPath<RemoteImage, _M>,
    _ mutation: () throws -> _MR
  ) rethrows -> _MR {
    try _$observationRegistrar.withMutation(of: self, keyPath: keyPath, mutation)
  }

  struct _SwiftDataNoType {
  }
}
extension RemoteImage: SwiftData.PersistentModel {
}

extension RemoteImage: Observation.Observable {
}

https://developer.apple.com/documentation/swiftdata/model()

https://developer.apple.com/documentation/swiftdata/persistentmodel

Core Data

image

image

image

https://developer.apple.com/documentation/coredata

image

.xcdatamodeld

https://developer.apple.com/documentation/coredata/creating-a-core-data-model

SwiftData vs Core Data

SwiftData 新版
Core Data 旧版
混合版,保留 Core Data + 渐进式 SwiftData

image

https://developer.apple.com/documentation/CoreData/adopting-swiftdata-for-a-core-data-app

https://developer.apple.com/documentation/coredata/core-data-model

demos

@attached(member, conformances: Observable, PersistentModel, Sendable, names: named(_\(backingData), named(persistentBackingData), named(schemaMetadata), named(init), named(_\)observationRegistrar), named(_SwiftDataNoType), named(access), named(withMutation)) @attached(memberAttribute) @attached(extension, conformances: Observable, PersistentModel, Sendable) macro Model()

// provide conformance to the PersistentModel and Observable protocols.

@Model
class RemoteImage {
    var sourceURL: URL
    var data: Data

    init(sourceURL: URL, data: Data = Data()) {
        self.sourceURL = sourceURL
        self.data = data
    }
}

import SwiftData

// Annotate new or existing model classes with the @Model macro.
@Model
class Trip {
    var name: String
    var destination: String
    var startDate: Date
    var endDate: Date
    var accommodation: Accommodation?
}

https://developer.apple.com/documentation/swiftdata/preserving-your-apps-model-data-across-launches

Observable

https://developer.apple.com/documentation/Observation/Observable

Codable

https://developer.apple.com/documentation/Swift/Codable

Storyboard vs SwiftUI

Storyboard 可以选择 Swift / Objective-C

image

Storyboard 只能使用 Core Data

image
image

Objective-C 测试只能选择 XCTest

image

Swift 测试可以选择 XCTest / Swift Testing

image

SwiftUI 必须使用 Swift

image

SwiftUI 可以选择 SwiftData / Core Data

image

Swift 测试可以选择 XCTest / Swift Testing

image

refs

https://www.hackingwithswift.com/quick-start/swiftdata

https://www.hackingwithswift.com/quick-start/swiftdata/swiftdata-vs-core-data



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!