AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-3402095

Whirlwind's questions

Martin Hope
Whirlwind
Asked: 2025-04-30 16:47:55 +0800 CST

createBackingData() 方法起什么作用?

  • 6

我注意到当我创建一个@Model并转到Xcode的Refactor->Generate成员初始化器时,Xcode会执行以下操作:

@Model
    class A {
        internal init(a: String = "", b: Date = Date(), _$backingData: any BackingData<SchemaV2.A> = A.createBackingData()) {
            self.a = a
            self.b = b
            self._$backingData = _$backingData
        }
        
        var a: String = ""
        var b: Date = Date()
    }

如果我使用自己的初始化程序手动执行此操作,我绝不会使用类似的东西createBackingData()。它的用途是什么?

swift
  • 1 个回答
  • 31 Views
Martin Hope
Whirlwind
Asked: 2025-04-30 16:20:06 +0800 CST

当上下文保存设置为自动时,“modelContext.save()”有意义吗?

  • 6

由于它提供的便利之一SwiftData是在模型上下文中添加或更改某些内容时自动保存记录,那么显式调用save()会有什么区别吗?我想在两种情况下,SwiftData都会决定吗?

@ModelActor
public actor DataHandler {
    @discardableResult
    public func new(item: Item) throws -> PersistentIdentifier {
      modelContext.insert(item)
      try modelContext.save()
      return item.persistentModelID
    }
    
  @discardableResult
  public func newEmptyItem() throws -> PersistentIdentifier {
    let item = Item()
    modelContext.insert(item)
    try modelContext.save()
    return item.persistentModelID
  }

我可以删除这一行吗:

try modelContext.save()

不用担心?

swift
  • 2 个回答
  • 35 Views
Martin Hope
Whirlwind
Asked: 2024-06-05 20:59:56 +0800 CST

如何使用 CGContext 定位元素,以便其在 SwiftUI 视图中正确显示

  • 6

我正在尝试使用 ImageRenderer 在 PDF 中打印一个简单的表格,但我很挣扎。我对这里的定位和措施感到很困惑。

这是代码:

import SwiftUI

struct Stat: Identifiable, Equatable {
    var id: String
    let totalMatches: Int
    let points: Int
}


struct GridView: View {
    let stats: [Stat]

    var body: some View {
        Grid(horizontalSpacing: 0, verticalSpacing: 0) {
            GridRow(alignment: .center) {
                Text("ID")
                Text("Matches")
                Text("Points")
            }.frame(maxWidth: .infinity)
                .frame(height: 50)
                .bold()
                .font(.headline)
                .background(.pink)
                .frame(maxWidth: .infinity)

            ForEach(Array(stats.enumerated()), id: \.1.id) { (index, stat) in
                GridRow(alignment: .center) {
                    Text(stat.id)
                    Text(stat.totalMatches, format: .number)
                    Text(stat.points, format: .number)
                }.frame(maxHeight: .infinity)
                    .frame(maxWidth: .infinity)
                    .background(index % 2 == 0 ? Color.white : Color.gray.opacity(0.2))
            }
        }
        .background(.purple.opacity(0.2))
    }
}


struct ExportImagesView: View {
    @State private var image = Image(systemName: "heart")

    private let pages = ["Page1"]
    private let stats = [
        Stat(id: UUID().uuidString, totalMatches: 4, points: 12),
        Stat(id: UUID().uuidString, totalMatches: 9, points: 31),
        Stat(id: UUID().uuidString, totalMatches: 4, points: 14),
        Stat(id: UUID().uuidString, totalMatches: 1, points: 0),
    ]

    var body: some View {
        VStack(spacing: 20) {

            image
            Divider()
            HStack {
                ShareLink("Export", item: render())
                Spacer()
                Button {
                    render()
                } label: {
                    Text("Render")
                }
            }.padding()

        }
    }

    @MainActor 
    @discardableResult
    func render() -> URL {

        let url = URL.documentsDirectory.appending(path: "output.pdf")

        var box = CGRect(x: 0, y: 0,  width: 595.2, height: 841.8)

        guard let pdf = CGContext(url as CFURL, mediaBox: &box, nil) else {
            return url
        }

        for _ in pages {
            pdf.beginPDFPage(nil)
            let renderer = ImageRenderer(content: GridView(stats: stats))
            renderer.render { size, context in context(pdf)}
            pdf.endPDFPage()

        }

        pdf.closePDF()

        if let cgImage =  pdf.makeImage() {

            let uiImage = UIImage(cgImage: cgImage)
            image = Image(uiImage: uiImage)
        }

        return url
    }
}



struct ExportImagesView_Previews: PreviewProvider {
    static var previews: some View {
        ExportImagesView()
    }
}

有两个主要问题。首先,我无法预览 pdf 文件。我尝试使用makeImage()on 方法CGContext但失败了。

此外,打印前内容的定位也存在更多问题。这是 pdf 的样子

PDF保存:

由于CGContext使用与 SwiftUI 不同的坐标系,因此所有内容都位于屏幕底部。我尝试使用.scaleBy(),但不幸的是,这并没有改变任何东西。

有人可以提供有关如何正确调整定位以CGContext与 SwiftUI 坐标系保持一致以及如何进行预览工作的指导吗?

  • 1 个回答
  • 40 Views
Martin Hope
Whirlwind
Asked: 2024-05-26 16:15:02 +0800 CST

显示警报时如何防止列表行动画

  • 6

我试图防止出现警报后出现“向后滑动”动画。以下是可重现的代码:

struct ContentView: View {
    @State private var showingAlert = false

    var body: some View {
        List {
            Text("Archive")
                .swipeActions(edge: .trailing, allowsFullSwipe: false) {

                    Button {
                        showingAlert = true
                    } label: {
                        Image(systemName: "archivebox.fill")
                    }
                    .tint(.yellow)
                }
                .alert("Archive?", isPresented: $showingAlert) {

                    Button("Archive") {
                       showingAlert = true
                    }
                    Button("Cancel", role: .cancel) {
                        showingAlert = false
                    }
                } message: {
                    Text("Some message")
                }
        }
    }
}

它看起来是这样的:

动图示例

但我希望该行保持在原位,以便存档按钮可见,并在用户交互时以动画方式返回(如果他们选择取消或存档)。我想这可能吗?

  • 1 个回答
  • 46 Views
Martin Hope
Whirlwind
Asked: 2024-04-14 00:18:15 +0800 CST

用户使用 Firebase Auth 登录后如何上传本地持久数据?

  • 4

在离线模式下工作时有一个很好的Firestore功能:

Cloud Firestore 支持离线数据持久化。此功能会缓存您的应用正在使用的 Cloud Firestore 数据的副本,以便您的应用可以在设备离线时访问这些数据。您可以写入、读取、监听和查询缓存的数据。当设备重新上线时,Cloud Firestore 会将您的应用所做的任何本地更改同步到 Cloud Firestore 后端。

但我真正需要的是同一件事:一旦用户以任何方式(匿名或使用某些提供商)登录,他们创建的所有数据都会上传到 Firestore。

我问这个问题是因为假设匿名登录失败或任何登录失败,并且我需要 UID 将用户与其数据连接起来。我想这是一个现实的场景,可能非常罕见,但它有可能发生。

Firebase API 中有什么东西可以解决这个问题吗?

  • 1 个回答
  • 21 Views
Martin Hope
Whirlwind
Asked: 2024-04-07 20:54:48 +0800 CST

当选择是可选的自定义类型时,列表选择不起作用

  • 5

我有这个简单的例子:

struct Message: Identifiable, Hashable {
    let id = UUID()
    let content: String
}

struct ContentView: View {
    @State private var selection: Message?
    @State private var messages: [Message] = [
        Message(content: "Hello"),
        Message(content: "World")
    ]

    var body: some View {
        NavigationStack {
            List(selection: $selection) {
                ForEach(messages) { message in
                    Text(message.content)
                        .tag(message as Message?)
                }
            }
            .navigationTitle("List")
           
        }.onChange(of: selection) { oldValue, newValue in
            print("Old value \(String(describing: oldValue))")
            print("New value \(String(describing: newValue))")
        }
    }
}

当选择列表中的项目时,我试图选择适当的模型。然而,这个例子中的选择并没有像我预期的那样发挥作用。

如果我将选择更改为 use UUID,则该选择有效。但是,当选择列表中的项目时,我需要获取相应的模型对象。

我究竟做错了什么?

  • 1 个回答
  • 25 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve