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”

Swift 字符串与字符串!与字符串?

AWS 和 Swift 3 的变化

如何在Swift 3中修复我的自定义UITextField对象?