小编Bag*_*lan的帖子

在Swift中扩展嵌套类型

我有一个主类,也提供了一个命名空间:

class A {
}
Run Code Online (Sandbox Code Playgroud)

和一个通过扩展添加的嵌套类(所有这些都是为了使用单独的文件):

extension A {
  class B {
  }
}
Run Code Online (Sandbox Code Playgroud)

我想通过扩展它来为嵌套类(B)添加功能; 我试过了:

extension A.B {
}
Run Code Online (Sandbox Code Playgroud)

我得到"'B'不是'A'的成员类型".

(我也尝试了一些不太合理的东西,但我会在这里省略它们以避免尴尬.阅读Swift文档和谷歌搜索"快速嵌套类扩展"也没有得出答案.)

知道是否以及如何实现这一目标?


更新:

感谢user3441734试用它时,此代码在单个文件(或Playground)中按预期工作!

当3个部分位于单独的文件中时仍然不起作用,可能是当前Swift编译器实现中的一个错误.我将向Apple提交一份错误报告.

swift2

42
推荐指数
1
解决办法
4653
查看次数

iOS WidgetKit 小部件中的右对齐 Text(Date(), style: .timer) 文本

这是一个有趣的困境:我想制作一个可靠地“滴答”的计时器,但同时也在可预测的位置渲染符号,以便我可以通过添加背景来装饰计时器。由于 WidgetKit 的限制,我无法可靠地每秒渲染自己的文本,并且必须依赖特殊视图,例如Text(Date(), style: .timer)。但是,此视图可以根据剩余时间将时间呈现为XX:XXX:XX ,这没问题,但它也占用容器的整个宽度并左对齐,这使得最后一个:XX根据剩余时间移动。

\n

这是一个例子:

\n

在此输入图像描述

\n

以及生成它的代码:

\n
struct MyWidgetEntryView : View {    \n    var body: some View {\n        VStack {\n            Text(Date().addingTimeInterval(1000), style: .timer)\n                .font(.body.monospacedDigit())\n                .background(Color.red)\n            \n            Text(Date().addingTimeInterval(100), style: .timer)\n                .background(Color.green)\n                .font(.body.monospacedDigit())\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

问题:有没有一种方法可以在 WidgetKit 小部件中可靠地更新时间显示,使分钟和秒的符号始终呈现在相同的位置,并且不会根据剩余时间而移动?

\n

我无法弄清楚,请帮助我!

\n

\xe2\x80\x93巴格兰

\n

widgetkit swiftui

10
推荐指数
1
解决办法
1101
查看次数

基于 SwiftUI 中该视图内的 GeometryReader 设置视图框架

作为我学习新技术的努力的一部分,我正在尝试在 SwiftUI 中实现我正在开发的应用程序的屏幕之一。我有这个粗略的布局:

在此处输入图片说明

此元素应拉伸以适应容器大小(不同宽度的设备),并将在 ScrollView 中使用。

这是我在一些绊脚石后想出的初步解决方案:

在此处输入图片说明

这对于第一次尝试来说效果很好,但我想通过将所有相关部分移动到一个单独的视图中来重构视图。除此之外,我希望新视图能够自动考虑我稍后可能添加的填充和其他大小修改。

所以,这是一个天真的重写:

在此处输入图片说明

正如您很容易发现的那样,ScrollView 中的 GeometryReader 假定父级提供的大小,有效地隐藏了大部分 View。

这种情况有几种“肮脏”的解决方案:为 View 设置一个固定的框架高度,设置一个接近正确大小的纵横比(考虑到有固定高度的 Text 视图,这有点棘手),保持 GeometryReader 作为最外层主视图的元素并将宽度作为初始化参数传递给子视图。

我正在为这个特定的布局寻找一个“干净”的解决方案,也许是为了更全面地了解 Views 是如何 SwiftUI 调节它们的大小的——在 WWDC 视频中,据说父 View 提出了一个大小,但随后子 View 返回了它自己的尺寸;有没有办法以某种方式干预该过程,还是全部通过私有 API 完成?

谢谢!

–巴格兰

ps 我认为除了 UI 预览之外的代码截图是最能说明问题的,但如果我也应该提供代码片段,请告诉我!

ios swift swiftui

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

SwiftUI 中 DragGesture 和 ScrollView 的交互

在我正在开发的一个应用程序中,有一个部分主要是“前进”导航——点击按钮会显示下一张幻灯片。但是,还需要辅助“向后”导航。这是我使用的方法:

import SwiftUI

struct Sample: View {
    @State private var dragOffset: CGFloat = -100
    var body: some View {
        VStack {

            Text("Perhaps a title")

            ScrollView {
                VStack {
                    Text("Some scrollable content is going to be here")

                    // ...

                    Button(action: {
                        // Go to the next slide
                    }) { Text("Next") }
                }
            }

            Text("and, maybe, something else")
        }
        .overlay(
            Image(systemName: "arrow.left").offset(x: dragOffset / 2),
            alignment: .leading
        )
        .gesture(
            DragGesture()
                .onChanged{
                    self.dragOffset = $0.translation.width
                }
                .onEnded {
                    self.dragOffset = -100 // Hide …
Run Code Online (Sandbox Code Playgroud)

swiftui draggesture

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

标签 统计

swiftui ×3

draggesture ×1

ios ×1

swift ×1

swift2 ×1

widgetkit ×1