我有一个需要iOS和tvOS使用的共享框架,但我想有选择地导入仅适用于iOS的框架(CoreTelephony).swift语法说你可以添加一个属性,但这不起作用:
@available(iOS 10.0, *) import CoreTelephony
这根本不受支持吗?我是否需要继承子类才能导入iOS特定的框架?
有没有办法禁用特定的选择器项目?在 AppKit 中,您可以NSPopUpButton通过NSMenuValidation协议禁用项目,但可以预见,禁用选择器中的标签不会产生任何影响。只是 SwiftUI 中的另一个 API 差距?
我试过:
Picker(selection: $viewModel.providerSelection, label: Text("Try using:")) {
ForEach(0..<Provider.allCases.count) {
Text(Provider.allCases[$0].rawValue.capitalized)
.disabled(true)
}
}
Run Code Online (Sandbox Code Playgroud)
禁用和不在这里之间没有视觉或交互差异。
我正在尝试使用自定义类型标识符在 macOS 上实现拖放以避免冲突,但它似乎不起作用。首先,这是一个具有公共和已知标识符的工作示例:
struct ReleaseView: View {
let id: Int
var body: some View {
GeometryReader { _ in
VStack(spacing: 16) {
Image(nsImage: NSImage(named: NSImage.networkName)!)
.contentShape(Rectangle())
.onDrag {
return NSItemProvider(item: "\(self.id)" as NSString, typeIdentifier: NSPasteboard.PasteboardType.string.rawValue)
}
DropZone()
}
}
}
}
struct DropZone: View {
@State var isDragging = false
var body: some View {
RoundedRectangle(cornerRadius: 16)
.stroke(style: StrokeStyle(lineWidth: 4, dash: [8, 8]))
.background(isDragging ? Color.secondary : Color.clear)
.frame(width: 100, height: 100)
.onDrop(of: [NSPasteboard.PasteboardType.string.rawValue], isTargeted: self.$isDragging) { itemProvider …Run Code Online (Sandbox Code Playgroud)