小编Vin*_*ent的帖子

Swift 中是否可以实现自定义综合条件一致性?

有没有办法在 swift 中创建自定义协议,并通过声明一些有关如何组合属性的规则,使编译器在所有属性都符合自定义协议时自动合成一致性?

现在标准Codable和协议 使用这种行为,但我不确定我们是否能够声明我们自己的协议具有这样的行为EquatableHashable

玩具示例:

我想用一个我正在尝试实现的简单例子来说明。我创建了一个名为Interpolatable

    protocol Interpolatable {

        func interpolate(to endValue: Self, at ratio: CGFloat) -> Self

    }
Run Code Online (Sandbox Code Playgroud)

我想做的是声明一个名为Keyframe: Interpolatable 仅存储符合Interpolatable协议的属性的结构。

    struct Keyframe: Interpolatable {

        let customValue1: CustomValueType1 //conforms to Interpolatable 
        let customValue2: CustomValueType2 //conforms to Interpolatable 

    }
Run Code Online (Sandbox Code Playgroud)

现在我希望能够在其他地方声明一种通用方法来告诉编译器如何使此类类型实现必要的函数以符合协议Interpolatable

这可能吗?这确实让人感觉非常Schwifty

generics protocols synthesize swift

5
推荐指数
0
解决办法
299
查看次数

SwiftUI:更改 macOS 上的默认命令菜单

我正在尝试更改 macOS SwiftUI 应用程序中的默认命令。我想将一些自定义命令附加到“查看”菜单,但我无法让它工作。

这是我尝试过的:

@main
struct MyApp: App {

    var body: some Scene {
        
        WindowGroup {
            AppView()
                .environmentObject(AppModel.shared)
                .environment(\.managedObjectContext, AppModel.shared.cloudKitCoordinator.coreDataStack.viewContext)
        }
        .commands {
            ViewCommands()
            SidebarCommands()
            ElementCommands()
            NavigationCommands()
        }
        
    }
    
}

struct ViewCommands: Commands {

    var body: some Commands {
        
        CommandMenu("View") {
            Button("Do something View related") {}
        }
        
    }
    
}
Run Code Online (Sandbox Code Playgroud)

但它没有将命令附加到“查看”菜单,而是创建了一个同名的第二个菜单:

在此处输入图片说明

有没有人改变默认命令菜单的运气,或者这只是 SwiftUI 的一部分,仍然有点原始?

macos swift swiftui

5
推荐指数
2
解决办法
452
查看次数

如何使用 SwiftUI 显示触控栏按钮?

我正在尝试为SwiftUI View. 似乎有SwiftUI使用.touchBar(content: () -> View)视图上的功能的API ,但文档不存在,我无法让我的触控栏显示任何内容。

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .touchBar {
                Button(action: {

                }) {
                    Text("do something")
                }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以编译并运行,但 Touch Bar 仍然是空的。如何让我的触摸栏使用 SwiftUI(不是催化剂)显示内容?

macos macbookpro-touch-bar swiftui

2
推荐指数
1
解决办法
1465
查看次数