SwiftUI:类型不符合协议(protocol) 'UIViewRepresentable'

标签 swift xcode swiftui

我正在开发一个新的 SwiftUI 应用程序,并试图弄清楚如何使这个 Swift 项目与 SwiftUI 兼容:
https://github.com/suzuki-0000/SKPhotoBrowser

问题是我无法使 UIViewRepresentable 工作。
我收到一个错误:

Type 'PhotoViewer' does not conform to protocol 'UIViewRepresentable'



这是我的代码:
struct PhotoViewer: UIViewRepresentable {

    @Binding var viewerImages:[SKPhoto]
    @Binding var currentPageIndex: Int

    func makeUIView(context: Context) -> SKPhotoBrowser {
        let browser = SKPhotoBrowser(photos: viewerImages)
        browser.initializePageIndex(currentPageIndex)
        browser.delegate = context.coordinator
        return browser
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    func updateUIView(_ browser: SKPhotoBrowser, context: Context) {
        browser.photos = viewerImages
        browser.currentPageIndex = currentPageIndex
    }

    class Coordinator: NSObject, SKPhotoBrowserDelegate {

        var control: PhotoViewer

        init(_ control: PhotoViewer) {
            self.control = control
        }

        func didShowPhotoAtIndex(_ browser: PhotoViewer) {
            self.control.currentPageIndex = browser.currentPageIndex
        }

    }
}

我在这里想念什么?

最佳答案

SKPhotoBrowserUIViewController子类,因此您需要使其符合 UIViewControllerRepresentable不是 UIViewRepresentable
其实差别不大:

struct PhotoViewer: UIViewControllerRepresentable {

    @Binding var viewerImages:[SKPhoto]
    @Binding var currentPageIndex: Int

    func makeUIViewController(context: Context) -> SKPhotoBrowser {
        let browser = SKPhotoBrowser(photos: viewerImages)
        browser.initializePageIndex(currentPageIndex)
        browser.delegate = context.coordinator
        return browser
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    func updateUIViewController(_ browser: SKPhotoBrowser, context: Context) {
        browser.photos = viewerImages
        browser.currentPageIndex = currentPageIndex
    }

    class Coordinator: NSObject, SKPhotoBrowserDelegate {

        var control: PhotoViewer

        init(_ control: PhotoViewer) {
            self.control = control
        }

        func didShowPhotoAtIndex(_ browser: PhotoViewer) {
            self.control.currentPageIndex = browser.currentPageIndex
        }

    }
}

关于SwiftUI:类型不符合协议(protocol) 'UIViewRepresentable',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483839/

相关文章:

swift - AVAudioRecorder 和 AVAudioPlayer 音频长度不同

swift - Swift 中基于 View 的表绑定(bind)

xcode - 在不使用 Xcode 的情况下通过终端链接 objective-c 类文件

ios - 如何在 SwiftUI 的 TabView 中添加底部曲线?

swift - 如何在 SwiftUI 中创建条件内容?

swiftui - 在 SwiftUI 中推送到另一个屏幕时如何隐藏 NavigationView

ios - 方法 ':' 提供的 Objective-C 方法 ' ' 与协议(protocol)中可选要求方法 ' ' 冲突

ios - UISearchController/UINavigationBar 在 UINavigationController 中使用时显示损坏的动画

iOS将containerview中的item链接到viewcontroller

xcode - 从 Xcode 5 删除配置文件