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

推荐订阅源

博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
量子位
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
Y
Y Combinator Blog
L
LangChain Blog
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客

博客园 - 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 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
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, 禁止转载 🈲️,侵权必究⚠️!