SwiftUI:类型不符合协议“UIViewRepresentable”
Posted
技术标签:
【中文标题】SwiftUI:类型不符合协议“UIViewRepresentable”【英文标题】:SwiftUI: Type does not conform to protocol 'UIViewRepresentable' 【发布时间】:2020-04-28 15:21:01 【问题描述】:我正在开发一个新的 SwiftUI 应用程序,并试图弄清楚如何使这个 Swift 项目与 SwiftUI 兼容: https://github.com/suzuki-0000/SKPhotoBrowser
问题是我无法使 UIViewRepresentable 工作。 我收到一个错误:
类型“PhotoViewer”不符合协议“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
我在这里错过了什么?
【问题讨论】:
【参考方案1】:SKPhotoBrowser
是 UIViewController
子类,因此您需要将其与 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
【讨论】:
【参考方案2】:也许您忘记明确指定 UIViewType
的类型别名?
【讨论】:
@FilipeSá 啊,你忘了typealias UIViewControllerType
以上是关于SwiftUI:类型不符合协议“UIViewRepresentable”的主要内容,如果未能解决你的问题,请参考以下文章
Text 或 Image 等视图类型如何符合 SwiftUI 中的 View 协议?
类型“ContentView”不符合协议“View”(Xcode - Swift UI)
如何在 SwiftUI 中符合 ButtonStyle 协议?
类型“Favorites.Type”不能符合“Encodable”;只有结构/枚举/类类型可以符合协议
ForEach 在符合 Identifiable 协议后无法在 SwiftUI 中工作
类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议