小编jos*_*shd的帖子

如何将演示应用程序目标添加到 Swift 包?

我希望包含一个带有自定义控件的 Swift 包的演示应用程序,该包显示每个控件的实现演示。有没有办法可以将其包含在 Swift 包中(并且还可以通过这种方式直接在包内开发/测试控件)?

swift-package-manager

8
推荐指数
3
解决办法
1261
查看次数

当 @Binding var 值发生变化时,有什么方法可以调用 withAnimation 吗?

我正在构建一个动画进度按钮,显示下载进度,然后在下载完成后展开以显示按钮文本(有点像 App Store 按钮)。

我有一个自定义按钮视图,它采用 @Binding 到外部进度 CGFloat 值。我知道我可以通过 init 设置视图的进度值,但这似乎并没有让我更接近。当然,进度在自定义按钮视图之外会发生变化。我希望能够让按钮自动处理进度值更改并在进度达到 1.0 时自动扩展。

我使用显式动画来为按钮形状设置动画(通过在 withAnimation 中包含几个私有 @State 属性更改)。问题是,当 @Binding 进度值更改时,我需要能够调用设置这些 @State 属性的代码。如果不在按钮视图之外发生显式的 withAnimation 调用,我看不到任何方法可以做到这一点。我不想使用隐式动画,因为当按钮的原点发生变化时,这会导致问题。我发现的演示都只是通过 .onTap 在按钮内设置状态。

理想情况下,有一种方法可以在 @Binding 值更改时调用函数。我见过一些关于使用发布商的内容,但这似乎有点矫枉过正?如果这是唯一的选择,那么我想知道我是否可以以某种方式在按钮视图内私下执行此操作,并且仍然将 $progress 传递给按钮(以获得最大的可重用性)?

swiftui

7
推荐指数
1
解决办法
706
查看次数

带有@Binding 控件的 SwiftUI 动态列表

如何使用@Binding-driven 控件构建动态列表而无需手动引用数组?看起来很明显,但是使用 List 或 ForEach 遍历数组会产生各种奇怪的错误。

struct OrderItem : Identifiable {
    let id = UUID()
    var label : String
    var value : Bool = false
}

struct ContentView: View {
    @State var items = [OrderItem(label: "Shirts"),
                        OrderItem(label: "Pants"),
                        OrderItem(label: "Socks")]
    var body: some View {
        NavigationView {
            Form {
                Section {
                    List {
                        Toggle(items[0].label, isOn: $items[0].value)
                        Toggle(items[1].label, isOn: $items[1].value)
                        Toggle(items[2].label, isOn: $items[2].value)
                    }
                }
            }.navigationBarTitle("Clothing")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

            ...
                Section {
                    List($items, id: \.id) { item in
                        Toggle(item.label, isOn: …
Run Code Online (Sandbox Code Playgroud)

swiftui combine swiftui-list

6
推荐指数
2
解决办法
4290
查看次数

ZIPFoundation:通过数据提供程序写入大 PNG 进行存档时出现问题

更新:我可以通过将 PNG 大小设置为超过任意值(即 700 x 700 pt 失败)来重现此问题。在任意值下写入和读取都很好。我不确定那条线到底在哪里。

我使用 zip 存档作为我的文档文件格式。当尝试从文件浏览器页面的多个存档中读取 PNG 预览时,我看到了意外的结果。

在后台查询文档 URL,然后创建文件数据对象。查询完成后,将在主线程上调用 UI 更新,并且文件数据对象充当集合视图的数据提供者。

PNG 被序列化为数据,如下所示:

let imageData = UIImagePNGRepresentation(image)
Run Code Online (Sandbox Code Playgroud)

读取数据时,相关条目被提取到内存中,然后反序列化为各自的对象。

我看到的是文档缩略图仅间歇性显示。ZIPFoundation 对于后台操作是否可能不是线程安全的?

我在一个更简单的测试项目中模拟了它,它工作得很好,但我没有阅读多个档案,也没有在后台调用它。我做错了什么吗(下面的代码)?

消费者闭包是否使用自己的线程(也许我在它完成之前返回数据)?

do {
    let decoder = JSONDecoder()
    let archive = Archive(url: URL, accessMode: .read)

    // Metadata
    if let metadataData = try archive?.readData(named: Document.MetadataFilename) {
        self.metadata = try decoder.decode(Metadata.self, from: metadataData)
    } else {
        logDebug(self, "metadata not read")
    }

    // Preview
    if let previewData = try archive?.readData(named: Document.PreviewFilename) {
        if let image = UIImage(data: …
Run Code Online (Sandbox Code Playgroud)

ios swift zipfoundation

5
推荐指数
1
解决办法
373
查看次数

具有递归枚举的Swift Codable协议

假设我有一个类似下面的模型,它允许我构建一个Foo对象树.

struct Foo {

    var kind : Kind

    enum Kind {
        case node([Foo])
        case leaf
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能制作这款Codable,专门用于case node([Foo])

cocoa cocoa-touch swift swift4 codable

4
推荐指数
2
解决办法
1113
查看次数