Swift 3:修复问题类型“className”不符合协议“UIDocumentPickerDelegate”
Posted
技术标签:
【中文标题】Swift 3:修复问题类型“className”不符合协议“UIDocumentPickerDelegate”【英文标题】:Swift 3: fix issue Type "className" does not conform to protocol 'UIDocumentPickerDelegate' 【发布时间】:2016-12-12 22:12:28 【问题描述】:我正在将我的代码从 Swift 2 迁移到 Swift 3,但我的代码抛出此错误:类型“className”不符合协议“UIDocumentPickerDelegate”。如您所见,我已经迁移了文档的许多部分,但错误仍然存在,
extension className: UIDocumentMenuDelegate
//Opening the Document Menu
func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController)
documentPicker.delegate = self
print ("documentMenu")
self.present(documentPicker, animated: true, completion: nil)
func documentMenuWasCancelled(_ documentMenu: UIDocumentMenuViewController)
//Using UIDocumentPickerDelegate, error persists here.
extension className: UIDocumentPickerDelegate
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL)
if(controller.documentPickerMode == UIDocumentPickerMode.import)
print ("success")
class className: BaseViewController
...Tons of code here...
@IBAction func importKeyButtonPressed(_ sender: UIButton)
let importMenu = UIDocumentMenuViewController(documentTypes: ["public.data","public.text","public.content"], in: UIDocumentPickerMode.import)
var documentPicker = UIDocumentPickerViewController(documentTypes: ["public.txt"], in: UIDocumentPickerMode.import)
documentPicker.delegate = self
documentPicker.modalPresentationStyle = UIModalPresentationStyle.fullScreen
self.present(documentPicker, animated: true, completion: nil)
我该如何解决?,我已经使用了协议所需的所有方法。谢谢
【问题讨论】:
我不知道这个问题,但如果你想符合 建议 Swift 约定,你的类名应该是“ClassName”,而不是“className”。跨度> 我无法重现该问题。符合UIDocumentPickerDelegate
的扩展没有错误消息。请提供足够的信息来重现您的问题。
你的 BaseViewController 是否继承自 UIViewController?
@dfd 我做得对,谢谢:D。问题剧照
@RyanH。是的,它确实。类 BaseViewController: UIViewController 覆盖 func viewDidLoad() super.viewDidLoad()
【参考方案1】:
我在此链接上修改了您的信息,存在类似问题。
Cannot conform to STPAddCardViewControllerDelegate since Xcode 8 GM on Swift 3
问题在于 swift 编译器无法自动识别某些信息。所以在这种情况下:
didPickDocumentAt url: URL
然后我按照这个链接的问题:
https://bugs.swift.org/browse/SR-2596
在此链接中,信息是 Swift 3 错误数据类型,因此我进行了更多研究并访问此页面。在这种情况下,错误的类型是“URL”。
然后解决方案在同一页面中。我写在下面:
weak var delegate : UIDocumentPickerDelegate?
@available(ios 8.0, *)
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: Foundation.URL )
//
print("something")
就此而言,我在我的计算机中重现了该错误,这是由于不同的导入库对数据类型具有相同的定义,在这种情况下是 URL 类型,Swift 3 不能自动识别,也不能正确地告诉错误。所以必须直接定义。
【讨论】:
感谢您用西班牙语发帖!这个答案解决了我的问题。问候 嗨何塞,@伊丽莎白!只是想让您知道,我们现在有西班牙语版本的 Stack Overflow,如果您对这样的事情感兴趣:es.***.com以上是关于Swift 3:修复问题类型“className”不符合协议“UIDocumentPickerDelegate”的主要内容,如果未能解决你的问题,请参考以下文章
尝试修复 Swift 3 错误;无法使用“String”类型的索引为“[[String:AnyObject]]”类型的值下标[关闭]
更新到 Swift 3.0:上下文类型“AnyObject”不能与字典文字一起使用
Object-C 中的 Swift 代码:“ClassName”没有可见的@interface 声明选择器“alloc”