有没有办法在 swift 中创建自定义协议,并通过声明一些有关如何组合属性的规则,使编译器在所有属性都符合自定义协议时自动合成一致性?
现在标准Codable
和协议 使用这种行为,但我不确定我们是否能够声明我们自己的协议具有这样的行为Equatable
。Hashable
我想用一个我正在尝试实现的简单例子来说明。我创建了一个名为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。
我正在尝试更改 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 的一部分,仍然有点原始?
我正在尝试为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(不是催化剂)显示内容?